<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pham-cfrg-hiae-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="HiAE">The HiAE Authenticated Encryption Algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-pham-cfrg-hiae-06"/>
    <author initials="F." surname="Denis" fullname="Frank Denis">
      <organization>Fastly Inc.</organization>
      <address>
        <email>fde@00f.net</email>
      </address>
    </author>
    <author initials="P." surname="Pham" fullname="Phuong Pham">
      <organization>Huawei</organization>
      <address>
        <email>pham.phuong@huawei.com</email>
      </address>
    </author>
    <author initials="L." surname="Prabel" fullname="Lucas Prabel">
      <organization>Huawei</organization>
      <address>
        <email>lucas.prabel@huawei.com</email>
      </address>
    </author>
    <author initials="S." surname="Sun" fullname="Shuzhou Sun">
      <organization>Huawei</organization>
      <address>
        <email>sunshuzhou@huawei.com</email>
      </address>
    </author>
    <date year="2026" month="May" day="10"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 167?>

<t>This document describes HiAE, a high-throughput authenticated encryption algorithm designed for next-generation wireless systems (6G) and high-speed data transmission applications.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/hiae-aead/draft-pham-hiae"/>.</t>
    </note>
  </front>
  <middle>
    <?line 171?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The evolution of wireless networks toward 6G, alongside the growing demands of cloud service providers and CDN operators, requires cryptographic algorithms capable of delivering unprecedented throughput while maintaining strong security guarantees. Current high-performance authenticated encryption schemes achieve impressive speeds by leveraging platform-specific SIMD instructions, particularly AES-NI on x86 architectures <xref target="AES-NI"/>. Notable examples include AEGIS <xref target="I-D.irtf-cfrg-aegis-aead"/>, SNOW-V <xref target="SNOW-V"/>, and Rocca-S <xref target="ROCCA-S"/>.</t>
      <t>While these platform-specific optimizations deliver high performance on their target architectures, they create a significant performance disparity across different hardware platforms. These algorithms excel on x86 processors equipped with AES-NI but exhibit substantially degraded performance on ARM architectures that implement SIMD functionality through NEON instructions. This inconsistency poses a critical challenge for modern network deployments where ARM processors dominate mobile devices, edge computing nodes, and increasingly, data center environments.</t>
      <t>The architectural differences between x86 and ARM extend beyond instruction set variations. They encompass fundamental distinctions in how AES round functions are implemented in hardware, pipeline structures, and memory subsystems. These differences mean that algorithms optimized for one architecture may inadvertently create bottlenecks on another, resulting in unpredictable performance characteristics across heterogeneous deployments.</t>
      <t>The transition to 6G networks amplifies these challenges. Next-generation wireless systems will rely heavily on software-defined networking (SDN) and cloud radio access networks (Cloud RAN), requiring cryptographic algorithms that perform consistently across diverse hardware platforms. The stringent latency requirements and massive data rates anticipated for 6G, potentially exceeding 1 Tbps, demand encryption schemes that can leverage the full capabilities of both x86 and ARM architectures without compromise.</t>
      <t>This document presents HiAE (High-throughput Authenticated Encryption), an authenticated encryption algorithm explicitly designed to address these cross-platform performance challenges. Through careful algorithmic design, HiAE delivers high performance on both x86 and ARM architectures by efficiently utilizing the capabilities of each platform without being overly dependent on architecture-specific features.</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>Throughout this document, “byte” refers to an 8-bit sequence.</t>
      <t>Basic operations:</t>
      <ul spacing="normal">
        <li>
          <t><tt>{}</tt>: an empty bit array.</t>
        </li>
        <li>
          <t><tt>{ 0 }</tt>: a single zero byte (8 zero bits).</t>
        </li>
        <li>
          <t><tt>|x|</tt>: the length of <tt>x</tt> in bits.</t>
        </li>
        <li>
          <t><tt>a ^ b</tt>: the bitwise exclusive OR operation between <tt>a</tt> and <tt>b</tt>.</t>
        </li>
        <li>
          <t><tt>a || b</tt>: the concatenation of <tt>a</tt> and <tt>b</tt>.</t>
        </li>
        <li>
          <t><tt>a mod b</tt>: the remainder of the Euclidean division between <tt>a</tt> as the dividend and <tt>b</tt> as the divisor.</t>
        </li>
      </ul>
      <t>Data manipulation:</t>
      <ul spacing="normal">
        <li>
          <t><tt>LE64(x)</tt>: returns the little-endian encoding of unsigned 64-bit integer <tt>x</tt>.</t>
        </li>
        <li>
          <t><tt>ZeroPad(x, n)</tt>: returns <tt>x</tt> after appending zeros until its length is a multiple of <tt>n</tt> bits. No padding is added if the length of <tt>x</tt> is already a multiple of <tt>n</tt>, including when <tt>x</tt> is empty.</t>
        </li>
        <li>
          <t><tt>Truncate(x, n)</tt>: returns the first <tt>n</tt> bits of <tt>x</tt>.</t>
        </li>
        <li>
          <t><tt>Tail(x, n)</tt>: returns the last <tt>n</tt> bits of <tt>x</tt>.</t>
        </li>
        <li>
          <t><tt>Split(x, n)</tt>: returns <tt>x</tt> split into <tt>n</tt>-bit blocks, ignoring partial blocks.</t>
        </li>
      </ul>
      <t>Cryptographic operations:</t>
      <ul spacing="normal">
        <li>
          <t><tt>AESL(x)</tt>: A single AES round function without key addition. Given a 128-bit AES state <tt>x</tt>, this function applies the following AES transformations in sequence:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>SubBytes: Apply the AES S-box to each byte</t>
            </li>
            <li>
              <t>ShiftRows: Cyclically shift the rows of the state</t>
            </li>
            <li>
              <t>MixColumns: Mix the columns of the state</t>
            </li>
          </ol>
          <t>
Formally: <tt>AESL(x) = MixColumns(ShiftRows(SubBytes(x)))</tt>  </t>
          <t>
These transformations are as specified in Section 5 of <xref target="FIPS-AES"/>. This is NOT the full AES encryption algorithm. It is a single round without the AddRoundKey operation (equivalent to using a zero round key). A test vector for this function is provided in the Test Vectors section.  </t>
          <t>
While Intel AES-NI and ARM NEON provide instructions with similar purposes (such as <tt>_mm_aesenc_si128</tt> on Intel and <tt>vaesmcq_u8(vaeseq_u8(...))</tt> on ARM), these instructions are not directly interchangeable at the API and code-generation levels. The architectural differences in how AES round functions are exposed and optimized require platform-specific implementation strategies, as detailed in the Implementation Considerations section.</t>
        </li>
      </ul>
      <t>Control flow and comparison:</t>
      <ul spacing="normal">
        <li>
          <t><tt>Repeat(n, F)</tt>: <tt>n</tt> sequential evaluations of <tt>F</tt>.</t>
        </li>
        <li>
          <t><tt>CtEq(a, b)</tt>: compares <tt>a</tt> and <tt>b</tt> in constant-time, returning <tt>True</tt> for an exact match and <tt>False</tt> otherwise.</t>
        </li>
      </ul>
      <t>AES blocks:</t>
      <ul spacing="normal">
        <li>
          <t><tt>Si</tt>: the <tt>i</tt>-th AES block of the current state.</t>
        </li>
        <li>
          <t><tt>S'i</tt>: the <tt>i</tt>-th AES block of the next state.</t>
        </li>
        <li>
          <t><tt>{Si, ...Sj}</tt>: the vector of the <tt>i</tt>-th AES block of the current state to the <tt>j</tt>-th block of the current state.</t>
        </li>
        <li>
          <t><tt>C0</tt>: an AES block built from the following bytes in hexadecimal format: <tt>{ 0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31, 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34 }</tt>.</t>
        </li>
        <li>
          <t><tt>C1</tt>: an AES block built from the following bytes in hexadecimal format: <tt>{ 0x4a, 0x40, 0x93, 0x82, 0x22, 0x99, 0xf3, 0x1d, 0x00, 0x82, 0xef, 0xa9, 0x8e, 0xc4, 0xe6, 0xc8 }</tt>.</t>
        </li>
        <li>
          <t><tt>ZERO</tt>: an AES block of all zeros (128 zero bits).</t>
        </li>
      </ul>
      <t>The constants C0 and C1 are domain separation constants derived from the fractional parts of π and e, respectively.</t>
      <t>Input and output values:</t>
      <ul spacing="normal">
        <li>
          <t><tt>key</tt>: the encryption key (256 bits).</t>
        </li>
        <li>
          <t><tt>nonce</tt>: the public nonce (128 bits).</t>
        </li>
        <li>
          <t><tt>ad</tt>: the associated data.</t>
        </li>
        <li>
          <t><tt>msg</tt>: the plaintext.</t>
        </li>
        <li>
          <t><tt>ct</tt>: the ciphertext.</t>
        </li>
        <li>
          <t><tt>tag</tt>: the authentication tag (128 bits).</t>
        </li>
      </ul>
    </section>
    <section anchor="the-hiae-algorithm">
      <name>The HiAE Algorithm</name>
      <t>This section provides the complete specification of HiAE. The algorithm operates on a 2048-bit internal state organized as sixteen 128-bit blocks, combining AES round functions with an efficient update mechanism to achieve both high security and cross-platform performance.</t>
      <section anchor="algorithm-parameters">
        <name>Algorithm Parameters</name>
        <t>HiAE maintains a 2048-bit state organized as sixteen 128-bit blocks denoted <tt>{S0, S1, S2, ..., S15}</tt>. Each block Si represents a 128-bit AES state that can be processed independently by AES round functions. This large state size provides security margins while enabling efficient parallel processing on modern architectures.</t>
        <t>The parameters for this algorithm, whose meaning is defined in <xref section="4" sectionFormat="comma" target="RFC5116"/>, are:</t>
        <ul spacing="normal">
          <li>
            <t><tt>K_LEN</tt> (key length) is 32 bytes (256 bits).</t>
          </li>
          <li>
            <t><tt>P_MAX</tt> (maximum length of the plaintext) is 2<sup>61</sup> - 1 bytes (2<sup>64</sup> - 8 bits).</t>
          </li>
          <li>
            <t><tt>A_MAX</tt> (maximum length of the associated data) is 2<sup>61</sup> - 1 bytes (2<sup>64</sup> - 8 bits).</t>
          </li>
          <li>
            <t><tt>N_MIN</tt> (minimum nonce length) = <tt>N_MAX</tt> (maximum nonce length) = 16 bytes (128 bits).</t>
          </li>
          <li>
            <t><tt>C_MAX</tt> (maximum ciphertext length) = <tt>P_MAX</tt> + tag length = (2<sup>61</sup> - 1) + 16 bytes ((2<sup>64</sup> - 8) + 128 bits).</t>
          </li>
        </ul>
        <t>Distinct associated data inputs, as described in <xref section="3" sectionFormat="comma" target="RFC5116"/>, <bcp14>MUST</bcp14> be unambiguously encoded as a single input.
It is up to the application to create a structure in the associated data input if needed.</t>
      </section>
      <section anchor="authenticated-encryption">
        <name>Authenticated Encryption</name>
        <artwork><![CDATA[
Encrypt(msg, ad, key, nonce)
]]></artwork>
        <t>The <tt>Encrypt</tt> function encrypts a message and returns the ciphertext along with an authentication tag that verifies the authenticity of the message and associated data, if provided.</t>
        <t>Security:</t>
        <ul spacing="normal">
          <li>
            <t>For a given key, the nonce <bcp14>MUST NOT</bcp14> be reused under any circumstances; doing so allows an attacker to recover the internal state.</t>
          </li>
          <li>
            <t>The key <bcp14>MUST</bcp14> be randomly chosen from a uniform distribution.</t>
          </li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>msg</tt>: the message to be encrypted (length <bcp14>MUST</bcp14> be less than or equal to <tt>P_MAX</tt>).</t>
          </li>
          <li>
            <t><tt>ad</tt>: the associated data to authenticate (length <bcp14>MUST</bcp14> be less than or equal to <tt>A_MAX</tt>).</t>
          </li>
          <li>
            <t><tt>key</tt>: the encryption key.</t>
          </li>
          <li>
            <t><tt>nonce</tt>: the public nonce.</t>
          </li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>ct</tt>: the ciphertext.</t>
          </li>
          <li>
            <t><tt>tag</tt>: the authentication tag.</t>
          </li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
Init(key, nonce)

ct = {}

ad_blocks = Split(ZeroPad(ad, 128), 128)
for ai in ad_blocks:
    Absorb(ai)

msg_blocks = Split(ZeroPad(msg, 128), 128)
for mi in msg_blocks:
    ct = ct || Enc(mi)

tag = Finalize(|ad|, |msg|)
ct = Truncate(ct, |msg|)

return (ct, tag)
]]></artwork>
      </section>
      <section anchor="authenticated-decryption">
        <name>Authenticated Decryption</name>
        <artwork><![CDATA[
Decrypt(ct, tag, ad, key, nonce)
]]></artwork>
        <t>The <tt>Decrypt</tt> function decrypts a ciphertext, verifies that the authentication tag is correct, and returns the message on success or an error if tag verification fails.</t>
        <t>Security:</t>
        <ul spacing="normal">
          <li>
            <t>If tag verification fails, the decrypted message and incorrect authentication tag <bcp14>MUST NOT</bcp14> be given as output. The decrypted message <bcp14>MUST</bcp14> be overwritten with zeros before the function returns.</t>
          </li>
          <li>
            <t>The comparison of the input <tt>tag</tt> with the <tt>expected_tag</tt> <bcp14>MUST</bcp14> be done in constant time.</t>
          </li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>ct</tt>: the ciphertext to decrypt (length <bcp14>MUST</bcp14> be less than or equal to <tt>P_MAX</tt>).</t>
          </li>
          <li>
            <t><tt>tag</tt>: the authentication tag.</t>
          </li>
          <li>
            <t><tt>ad</tt>: the associated data to authenticate (length <bcp14>MUST</bcp14> be less than or equal to <tt>A_MAX</tt>).</t>
          </li>
          <li>
            <t><tt>key</tt>: the encryption key.</t>
          </li>
          <li>
            <t><tt>nonce</tt>: the public nonce.</t>
          </li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <t>Either the decrypted message <tt>msg</tt> or an error indicating that the authentication tag is invalid for the given inputs.</t>
          </li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
Init(key, nonce)

msg = {}

ad_blocks = Split(ZeroPad(ad, 128), 128)
for ai in ad_blocks:
    Absorb(ai)

ct_blocks = Split(ct, 128)
cn = Tail(ct, |ct| mod 128)

for ci in ct_blocks:
    msg = msg || Dec(ci)

if cn is not empty:
    msg = msg || DecPartial(cn)

expected_tag = Finalize(|ad|, |msg|)

if CtEq(tag, expected_tag) is False:
    erase msg
    erase expected_tag
    return "verification failed" error
else:
    return msg
]]></artwork>
      </section>
      <section anchor="core-functions">
        <name>Core Functions</name>
        <t>The following sections describe the fundamental operations that form the building blocks of HiAE. These functions manipulate the 2048-bit state to provide confusion, diffusion, and the absorption of input data.</t>
        <section anchor="the-state-rotation-function">
          <name>The State Rotation Function</name>
          <artwork><![CDATA[
Rol()
]]></artwork>
          <t>The <tt>Rol</tt> function provides diffusion by rotating the sixteen 128-bit blocks of the state one position to the left. This ensures that local changes propagate throughout the entire state over multiple rounds.</t>
          <t>Modifies:</t>
          <ul spacing="normal">
            <li>
              <t><tt>{S0, ...S15}</tt>: the state.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
  t = S0
 S0 = S1
 S1 = S2
 S2 = S3
 S3 = S4
 S4 = S5
 S5 = S6
 S6 = S7
 S7 = S8
 S8 = S9
 S9 = S10
S10 = S11
S11 = S12
S12 = S13
S13 = S14
S14 = S15
S15 = t
]]></artwork>
        </section>
        <section anchor="the-state-update-functions">
          <name>The State Update Functions</name>
          <t>The state update functions form the cryptographic core of HiAE. They combine the AESL transformation with XOR operations and state rotation to achieve both security and efficiency.</t>
          <section anchor="the-update-function">
            <name>The Update Function</name>
            <artwork><![CDATA[
Update(xi)
]]></artwork>
            <t>The <tt>Update</tt> function is the core of the HiAE algorithm.
It updates the state <tt>{S0, ...S15}</tt> using a 128-bit value.</t>
            <t>Inputs:</t>
            <ul spacing="normal">
              <li>
                <t><tt>xi</tt>: the 128-bit block to be absorbed.</t>
              </li>
            </ul>
            <t>Modifies:</t>
            <ul spacing="normal">
              <li>
                <t><tt>{S0, ...S15}</tt>: the state.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <artwork><![CDATA[
  t = AESL(S0 ^ S1) ^ xi
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ xi
S13 = S13 ^ xi

Rol()
]]></artwork>
          </section>
          <section anchor="the-updateenc-function">
            <name>The UpdateEnc Function</name>
            <artwork><![CDATA[
UpdateEnc(mi)
]]></artwork>
            <t>The <tt>UpdateEnc</tt> function extends the basic <tt>Update</tt> function to provide encryption. It absorbs a plaintext block while simultaneously generating the corresponding ciphertext block through an additional XOR with state block S9.</t>
            <t>Inputs:</t>
            <ul spacing="normal">
              <li>
                <t><tt>mi</tt>: a 128-bit block to be encrypted.</t>
              </li>
            </ul>
            <t>Outputs:</t>
            <ul spacing="normal">
              <li>
                <t><tt>ci</tt>: the encrypted 128-bit block.</t>
              </li>
            </ul>
            <t>Modifies:</t>
            <ul spacing="normal">
              <li>
                <t><tt>{S0, ...S15}</tt>: the state.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <artwork><![CDATA[
  t = AESL(S0 ^ S1) ^ mi
 ci = t ^ S9
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi

Rol()

return ci
]]></artwork>
          </section>
          <section anchor="the-updatedec-function">
            <name>The UpdateDec Function</name>
            <artwork><![CDATA[
UpdateDec(ci)
]]></artwork>
            <t>The <tt>UpdateDec</tt> function provides the inverse operation of <tt>UpdateEnc</tt>. It processes a ciphertext block to recover the plaintext while maintaining the same state update pattern, ensuring that encryption and decryption produce identical internal states.</t>
            <t>Inputs:</t>
            <ul spacing="normal">
              <li>
                <t><tt>ci</tt>: a 128-bit block to be decrypted.</t>
              </li>
            </ul>
            <t>Outputs:</t>
            <ul spacing="normal">
              <li>
                <t><tt>mi</tt>: the decrypted 128-bit block.</t>
              </li>
            </ul>
            <t>Modifies:</t>
            <ul spacing="normal">
              <li>
                <t><tt>{S0, ...S15}</tt>: the state.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <artwork><![CDATA[
  t = ci ^ S9
 mi = AESL(S0 ^ S1) ^ t
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi

Rol()

return mi
]]></artwork>
          </section>
          <section anchor="the-diffuse-function">
            <name>The Diffuse Function</name>
            <artwork><![CDATA[
Diffuse(x0, x1)
]]></artwork>
            <t>The <tt>Diffuse</tt> function ensures full state mixing by performing 32 consecutive update operations, alternating between two input values. This function is critical for security during initialization and finalization phases, guaranteeing that every bit of the key and nonce influences the entire state, and that the authentication tag depends on all state bits.</t>
            <t>Inputs:</t>
            <ul spacing="normal">
              <li>
                <t><tt>x0</tt>: a 128-bit input value for even-numbered updates (updates 0, 2, 4, ..., 30).</t>
              </li>
              <li>
                <t><tt>x1</tt>: a 128-bit input value for odd-numbered updates (updates 1, 3, 5, ..., 31).</t>
              </li>
            </ul>
            <t>Modifies:</t>
            <ul spacing="normal">
              <li>
                <t><tt>{S0, ...S15}</tt>: the state.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <artwork><![CDATA[
Repeat(16,
  Update(x0)
  Update(x1)
)
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="initialization-and-processing-functions">
        <name>Initialization and Processing Functions</name>
        <t>The following functions implement the high-level operations of HiAE: initialization, data absorption, encryption/decryption, and finalization.</t>
        <section anchor="the-init-function">
          <name>The Init Function</name>
          <artwork><![CDATA[
Init(key, nonce)
]]></artwork>
          <t>The <tt>Init</tt> function constructs the initial state <tt>{S0, ...S15}</tt> from the encryption key and nonce. The initialization process carefully distributes key material across the state and applies the Diffuse function to ensure all state bits are cryptographically mixed before processing begins.</t>
          <t>Inputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>key</tt>: the encryption key.</t>
            </li>
            <li>
              <t><tt>nonce</tt>: the public nonce.</t>
            </li>
          </ul>
          <t>Defines:</t>
          <ul spacing="normal">
            <li>
              <t><tt>{S0, ...S15}</tt>: the initial state.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
k0, k1 = Split(key, 128)

 S0 = C0
 S1 = k0
 S2 = C0
 S3 = nonce
 S4 = ZERO
 S5 = k0
 S6 = ZERO
 S7 = C1
 S8 = k1
 S9 = ZERO
S10 = nonce ^ k1
S11 = C0
S12 = C1
S13 = k1
S14 = ZERO
S15 = C0 ^ C1

Diffuse(k0, k1)
]]></artwork>
        </section>
        <section anchor="the-absorb-function">
          <name>The Absorb Function</name>
          <artwork><![CDATA[
Absorb(ai)
]]></artwork>
          <t>The <tt>Absorb</tt> function processes associated data by incorporating 128-bit blocks into the internal state. This function is used exclusively for authenticated data that should influence the authentication tag but not produce ciphertext output.</t>
          <t>Inputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>ai</tt>: the 128-bit input block.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
Update(ai)
]]></artwork>
        </section>
        <section anchor="the-enc-function">
          <name>The Enc Function</name>
          <artwork><![CDATA[
Enc(mi)
]]></artwork>
          <t>The <tt>Enc</tt> function encrypts a single 128-bit plaintext block. It serves as a simple wrapper around <tt>UpdateEnc</tt>, providing a clean interface for the block-by-block encryption process.</t>
          <t>Inputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>mi</tt>: the 128-bit input block.</t>
            </li>
          </ul>
          <t>Outputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>ci</tt>: the 128-bit encrypted block.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
ci = UpdateEnc(mi)
return ci
]]></artwork>
        </section>
        <section anchor="the-dec-function">
          <name>The Dec Function</name>
          <artwork><![CDATA[
Dec(ci)
]]></artwork>
          <t>The <tt>Dec</tt> function decrypts a single 128-bit ciphertext block. Like <tt>Enc</tt>, it provides a clean interface by wrapping the <tt>UpdateDec</tt> function.</t>
          <t>Inputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>ci</tt>: the 128-bit encrypted block.</t>
            </li>
          </ul>
          <t>Outputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>mi</tt>: the 128-bit decrypted block.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
mi = UpdateDec(ci)
return mi
]]></artwork>
        </section>
        <section anchor="the-decpartial-function">
          <name>The DecPartial Function</name>
          <artwork><![CDATA[
DecPartial(cn)
]]></artwork>
          <t>The <tt>DecPartial</tt> function handles the special case of decrypting a partial block at the end of a ciphertext. This function carefully reconstructs the keystream to decrypt blocks smaller than 128 bits while maintaining the same state evolution as encryption.</t>
          <t>Inputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>cn</tt>: the encrypted input.</t>
            </li>
          </ul>
          <t>Outputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>mn</tt>: the decryption of <tt>cn</tt>.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
# Step 1: Recover the keystream that would encrypt a full zero block
ks = AESL(S0 ^ S1) ^ ZeroPad(cn, 128) ^ S9

# Step 2: Construct a full 128-bit ciphertext block
# by appending the appropriate keystream bits
ci = cn || Tail(ks, 128 - |cn|)

# Step 3: Decrypt the full block using standard UpdateDec
mi = UpdateDec(ci)

# Step 4: Extract only the decrypted bytes corresponding to the partial input
mn = Truncate(mi, |cn|)

return mn
]]></artwork>
        </section>
        <section anchor="the-finalize-function">
          <name>The Finalize Function</name>
          <artwork><![CDATA[
Finalize(ad_len_bits, msg_len_bits)
]]></artwork>
          <t>The <tt>Finalize</tt> function completes the authentication process by generating a 128-bit tag. It incorporates the lengths of both the associated data and message (each encoded as 8 bytes in little-endian format), applies the Diffuse function for final mixing, and combines all state blocks to produce the authentication tag.</t>
          <t>Inputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>ad_len_bits</tt>: the length of the associated data in bits.</t>
            </li>
            <li>
              <t><tt>msg_len_bits</tt>: the length of the message in bits.</t>
            </li>
          </ul>
          <t>Outputs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>tag</tt>: the authentication tag.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <artwork><![CDATA[
t = LE64(ad_len_bits) || LE64(msg_len_bits)
Diffuse(t, t)

tag = S0 ^ S1 ^ S2 ^ S3 ^ S4 ^ S5 ^ S6 ^ S7 ^
      S8 ^ S9 ^ S10 ^ S11 ^ S12 ^ S13 ^ S14 ^ S15

return tag
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="encoding-ct-tag-tuples">
      <name>Encoding (ct, tag) Tuples</name>
      <t>Applications <bcp14>MAY</bcp14> keep the ciphertext and the authentication tag in distinct structures or encode both as a single string.</t>
      <t>In the latter case, the tag <bcp14>MUST</bcp14> immediately follow the ciphertext:</t>
      <artwork><![CDATA[
combined_ct = ct || tag
]]></artwork>
    </section>
    <section anchor="alternative-operating-modes">
      <name>Alternative Operating Modes</name>
      <t>While HiAE is primarily designed as an authenticated encryption algorithm, its flexible structure allows it to operate in two additional modes: as a stream cipher for keystream generation and as a message authentication code (MAC) for data authentication without encryption.</t>
      <section anchor="hiae-as-a-stream-cipher">
        <name>HiAE as a Stream Cipher</name>
        <t>The stream cipher mode of HiAE generates a keystream by encrypting an all-zero message.</t>
        <artwork><![CDATA[
Stream(len, key, nonce)
]]></artwork>
        <t>The <tt>Stream</tt> function expands a key and an optional nonce into a variable-length keystream.</t>
        <t>Security:</t>
        <ul spacing="normal">
          <li>
            <t>When the nonce is fixed (including when using the default all-zeros nonce), a distinct key <bcp14>MUST</bcp14> be used for each invocation to maintain security.</t>
          </li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>len</tt>: the length of the keystream to generate in bits.</t>
          </li>
          <li>
            <t><tt>key</tt>: the HiAE key.</t>
          </li>
          <li>
            <t><tt>nonce</tt>: the HiAE nonce. If unspecified, it is set to <tt>N_MAX</tt> zero bytes.</t>
          </li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>stream</tt>: the keystream.</t>
          </li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
if nonce is unspecified:
    nonce = 16 zero bytes

if len == 0:
    return {}
else:
    stream, tag = Encrypt(0 repeated len times, {}, key, nonce)
    return stream
]]></artwork>
        <t>This is equivalent to encrypting a message of <tt>len</tt> zero bits without associated data and discarding the authentication tag.</t>
        <t>Instead of relying on the generic <tt>Encrypt</tt> function, implementations can omit the <tt>Finalize</tt> function.</t>
        <t>After initialization, the <tt>Update</tt> function is called with constant parameters, allowing further optimizations.</t>
      </section>
      <section anchor="hiae-as-a-message-authentication-code">
        <name>HiAE as a Message Authentication Code</name>
        <t>In MAC mode, HiAE processes input data without generating ciphertext, producing only an authentication tag. This mode is useful when data authenticity is required without confidentiality.</t>
        <t>Note: Implementations of the <tt>Encrypt</tt> and <tt>Decrypt</tt> functions are not required to support MAC-only mode. This is an optional feature that can be implemented separately.</t>
        <artwork><![CDATA[
Mac(data, key, nonce)
]]></artwork>
        <t>Security:</t>
        <ul spacing="normal">
          <li>
            <t>This is the only function that allows the reuse of <tt>(key, nonce)</tt> pairs with different inputs.</t>
          </li>
          <li>
            <t>HiAE-based MAC functions <bcp14>MUST NOT</bcp14> be used as hash functions: if the key is known, inputs causing state collisions can easily be crafted.</t>
          </li>
          <li>
            <t>Unlike hash-based MACs, tags <bcp14>MUST NOT</bcp14> be used for key derivation as there is no guarantee that they are uniformly random.</t>
          </li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>data</tt>: the input data to authenticate (length <bcp14>MUST</bcp14> be less than or equal to <tt>A_MAX</tt>).</t>
          </li>
          <li>
            <t><tt>key</tt>: the secret key.</t>
          </li>
          <li>
            <t><tt>nonce</tt>: the public nonce.</t>
          </li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <t><tt>tag</tt>: the authentication tag.</t>
          </li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
Init(key, nonce)

data_blocks = Split(ZeroPad(data, 128), 128)
for di in data_blocks:
    Absorb(di)

tag = Finalize(|data|, 0)

return tag
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="classic-setting">
        <name>Classic Setting</name>
        <t>HiAE provides 256-bit security against key recovery and state recovery attacks, along with 128-bit security for integrity against forgery attempts.</t>
        <t>Usage constraints:</t>
        <ul spacing="normal">
          <li>
            <t>Tag truncation is not allowed. Implementations <bcp14>MUST</bcp14> use the full 128-bit authentication tag.</t>
          </li>
          <li>
            <t>A single key <bcp14>MUST NOT</bcp14> be used to protect more than 2<sup>64</sup> messages.</t>
          </li>
          <li>
            <t>For a given key, the nonce <bcp14>MUST NOT</bcp14> be reused under any circumstances (as specified in the Authenticated Encryption section).</t>
          </li>
        </ul>
        <t>It is important to note that the encryption security assumes the attacker cannot successfully forge messages through repeated trials <xref target="HiAE-Clarification"/>.</t>
        <t>Regarding keystream bias attacks, analysis shows that at least 150-bit security is guaranteed by HiAE.</t>
        <t>Finally, HiAE is assumed to be secure against key-committing attacks at the birthday bound security level (64 bits), but it is not secure in the context-committing setting.</t>
      </section>
      <section anchor="quantum-setting">
        <name>Quantum Setting</name>
        <t>HiAE targets a security strength of 128 bits against key recovery attacks and forgery attacks in the quantum setting. Security is not claimed against online superposition queries to cryptographic oracles, as such attacks are highly impractical in real-world applications.</t>
      </section>
      <section anchor="attack-considerations">
        <name>Attack Considerations</name>
        <t>HiAE is assumed to be secure against the following attacks:</t>
        <ol spacing="normal" type="1"><li>
            <t>Key-Recovery Attack: 256-bit security against key recovery attacks.</t>
          </li>
          <li>
            <t>Differential Attack: 256-bit security against differential attacks in the initialization phase.</t>
          </li>
          <li>
            <t>Forgery Attack: 128-bit security against forgery attacks.</t>
          </li>
          <li>
            <t>Integral Attack: Secure against integral attacks.</t>
          </li>
          <li>
            <t>State-Recovery Attack:
            </t>
            <ul spacing="normal">
              <li>
                <t>Guess-and-Determine Attack: The time complexity of the guess-and-determine attack cannot be lower than 2<sup>256</sup>.</t>
              </li>
              <li>
                <t>Algebraic Attack: The system of equations to recover HiAE states cannot be solved with time complexity lower than 2<sup>256</sup>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Linear Bias: At least 150-bit security against statistical attacks.</t>
          </li>
          <li>
            <t>Key-Committing Attacks: Secure in the FROB, CMT-1, and CMT-2 models at the birthday bound security level.</t>
          </li>
          <li>
            <t>Context-Committing Attacks: Security is not claimed in the CMT-3 model.</t>
          </li>
        </ol>
        <t>The details of the cryptanalysis can be found in the paper <xref target="HiAE"/>.</t>
      </section>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <t>HiAE is designed to balance the performance of XOR and AES instructions across both ARM and x86 architectures while being optimized to push performance to its limits. The algorithm’s XAXX structure enables platform-specific optimizations by exploiting the fundamental differences in how ARM and Intel processors implement AES round functions.</t>
      <section anchor="state-rotation-optimization">
        <name>State Rotation Optimization</name>
        <t>Instead of performing physical rotations with the <tt>Rol()</tt> function, implementations can use a cycling index (offset) approach to avoid copying the entire 2048-bit state on every rotation. This optimization provides significant performance improvements across all platforms.</t>
        <section anchor="cycling-index-approach">
          <name>Cycling Index Approach</name>
          <t>The standard <tt>Rol()</tt> function requires copying all sixteen 128-bit blocks:</t>
          <artwork><![CDATA[
  t = S0
 S0 = S1
 S1 = S2
 ...
S15 = t
]]></artwork>
          <t>This approach copies 2048 bits of data on every rotation. An optimized implementation can instead:</t>
          <ol spacing="normal" type="1"><li>
              <t>Keep the state blocks in fixed array positions</t>
            </li>
            <li>
              <t>Maintain an <tt>offset</tt> variable tracking the logical position of S0</t>
            </li>
            <li>
              <t>Map logical state block Si to physical position <tt>(i + offset) mod 16</tt></t>
            </li>
            <li>
              <t>Replace the entire <tt>Rol()</tt> operation with: <tt>offset = (offset + 1) mod 16</tt></t>
            </li>
          </ol>
        </section>
        <section anchor="state-access-pattern">
          <name>State Access Pattern</name>
          <t>With this optimization, the logical-to-physical state block mapping becomes:</t>
          <ul spacing="normal">
            <li>
              <t>Logical <tt>S0</tt> maps to physical position <tt>offset mod 16</tt></t>
            </li>
            <li>
              <t>Logical <tt>S3</tt> maps to physical position <tt>(3 + offset) mod 16</tt></t>
            </li>
            <li>
              <t>Logical <tt>S9</tt> maps to physical position <tt>(9 + offset) mod 16</tt></t>
            </li>
            <li>
              <t>Logical <tt>S13</tt> maps to physical position <tt>(13 + offset) mod 16</tt></t>
            </li>
          </ul>
          <t>This approach is mathematically equivalent to the specification but eliminates the expensive memory operations associated with state rotation. Since <tt>Rol()</tt> is called in every <tt>Update()</tt>, <tt>UpdateEnc()</tt>, and <tt>UpdateDec()</tt> operation, this optimization provides substantial performance benefits during encryption and decryption operations.</t>
        </section>
        <section anchor="batch-processing-optimization">
          <name>Batch Processing Optimization</name>
          <t>Since the offset cycles back to zero every 16 operations (<tt>offset mod 16</tt>), implementations may benefit from processing data in batches of 16 blocks. After processing 16 consecutive input blocks, the logical state mapping returns to its original configuration, which can simplify implementation and potentially enable further optimizations such as loop unrolling or vectorization of the batch processing logic.</t>
          <t>When the offset is aligned to zero at the start of a batch, implementations can hardcode the specific offset values for each operation within the unrolled batch processing function, eliminating the need for modular arithmetic during the inner loop and providing additional performance benefits.</t>
        </section>
      </section>
      <section anchor="platform-specific-optimizations">
        <name>Platform-Specific Optimizations</name>
        <t>The key to HiAE’s cross-platform efficiency lies in understanding how different architectures implement AES operations.</t>
        <t>The following optimizations leverage architectural differences between ARM and Intel processors to maximize HiAE’s performance while maintaining cryptographic correctness.</t>
        <section anchor="arm-neon-optimizations">
          <name>ARM NEON Optimizations</name>
          <t>ARM processors with NEON SIMD extensions can efficiently compute <tt>AESL(x^y)</tt> and (with SHA3 extensions) three-way XOR operations. For convenience, the following additional primitives can be defined:</t>
          <ul spacing="normal">
            <li>
              <t><tt>XAESL(x, y)</tt>: Computes <tt>AESL(x^y)</tt> in a single fused operation (assembly instruction <tt>AESE ∘ AESMC</tt>, or equivalently C intrinsic <tt>vaesmcq_u8(vaeseq_u8(x, y))</tt>)</t>
            </li>
            <li>
              <t><tt>XOR3(x, y, z)</tt>: Computes <tt>x^y^z</tt> in a single three-way XOR instruction (assembly instruction <tt>EOR3</tt>, or equivalently C intrinsic <tt>veor3q_u8(x, y, z)</tt>)</t>
            </li>
          </ul>
          <section anchor="arm-optimized-update-function">
            <name>ARM-Optimized Update Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
Update(xi)
  t = AESL(S0 ^ S1) ^ xi
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ xi
S13 = S13 ^ xi
Rol()
]]></artwork>
            <t>ARM-optimized implementation:</t>
            <artwork><![CDATA[
Update_ARM(xi)
  t = XAESL(S0, S1) ^ xi
 S0 = AESL(S13) ^ t
 S3 = S3 ^ xi
S13 = S13 ^ xi
Rol()
]]></artwork>
          </section>
          <section anchor="arm-optimized-updateenc-function">
            <name>ARM-Optimized UpdateEnc Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
UpdateEnc(mi)
  t = AESL(S0 ^ S1) ^ mi
 ci = t ^ S9
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return ci
]]></artwork>
            <t>ARM-optimized implementation:</t>
            <artwork><![CDATA[
UpdateEnc_ARM(mi)
  t = XAESL(S0, S1) ^ mi
 ci = t ^ S9
 S0 = AESL(S13) ^ t
 S3 = S3 ^ mi
S13 = S13 ^ mi
Rol()
return ci
]]></artwork>
          </section>
          <section anchor="arm-optimized-updatedec-function">
            <name>ARM-Optimized UpdateDec Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
UpdateDec(ci)
  t = ci ^ S9
 mi = AESL(S0 ^ S1) ^ t
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return mi
]]></artwork>
            <t>ARM-optimized implementation:</t>
            <artwork><![CDATA[
UpdateDec_ARM(ci)
  t = ci ^ S9
 mi = XAESL(S0, S1) ^ t
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return mi
]]></artwork>
          </section>
          <section anchor="arm-optimized-decpartial-function">
            <name>ARM-Optimized DecPartial Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
DecPartial(cn)
ks = AESL(S0 ^ S1) ^ ZeroPad(cn, 128) ^ S9
ci = cn || Tail(ks, 128 - |cn|)
mi = UpdateDec(ci)
mn = Truncate(mi, |cn|)
return mn
]]></artwork>
            <t>ARM-optimized implementation:</t>
            <artwork><![CDATA[
DecPartial_ARM(cn)
ks = XOR3(XAESL(S0, S1), ZeroPad(cn, 128), S9)
ci = cn || Tail(ks, 128 - |cn|)
mi = UpdateDec_ARM(ci)
mn = Truncate(mi, |cn|)
return mn
]]></artwork>
          </section>
        </section>
        <section anchor="intel-aes-ni-optimizations">
          <name>Intel AES-NI Optimizations</name>
          <t>Intel processors with AES-NI can efficiently compute <tt>AESL(y)^z</tt> patterns. We can define the following additional function:</t>
          <ul spacing="normal">
            <li>
              <t><tt>AESLX(y, z)</tt>: Computes <tt>AESL(y) ^ z</tt> using a single instruction (assembly instruction <tt>AESENC</tt>, or equivalently C intrinsic <tt>_mm_aesenc_si128(y, z)</tt>)</t>
            </li>
          </ul>
          <section anchor="intel-optimized-update-function">
            <name>Intel-Optimized Update Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
Update(xi)
  t = AESL(S0 ^ S1) ^ xi
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ xi
S13 = S13 ^ xi
Rol()
]]></artwork>
            <t>Intel-optimized implementation:</t>
            <artwork><![CDATA[
Update_Intel(xi)
  t = AESLX(S0 ^ S1, xi)
 S0 = AESLX(S13, t)
 S3 =  S3 ^ xi
S13 = S13 ^ xi
Rol()
]]></artwork>
          </section>
          <section anchor="intel-optimized-updateenc-function">
            <name>Intel-Optimized UpdateEnc Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
UpdateEnc(mi)
  t = AESL(S0 ^ S1) ^ mi
 ci = t ^ S9
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return ci
]]></artwork>
            <t>Intel-optimized implementation:</t>
            <artwork><![CDATA[
UpdateEnc_Intel(mi)
 ci = AESLX(S0 ^ S1, mi ^ S9)
  t = ci ^ S9
 S0 = AESLX(S13, t)
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return ci
]]></artwork>
          </section>
          <section anchor="intel-optimized-updatedec-function">
            <name>Intel-Optimized UpdateDec Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
UpdateDec(ci)
  t = ci ^ S9
 mi = AESL(S0 ^ S1) ^ t
 S0 = AESL(S13) ^ t
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return mi
]]></artwork>
            <t>Intel-optimized implementation:</t>
            <artwork><![CDATA[
UpdateDec_Intel(ci)
  t = ci ^ S9
 mi = AESLX(S0 ^ S1, t)
 S0 = AESLX(S13, t)
 S3 =  S3 ^ mi
S13 = S13 ^ mi
Rol()
return mi
]]></artwork>
          </section>
          <section anchor="intel-optimized-decpartial-function">
            <name>Intel-Optimized DecPartial Function</name>
            <t>Original implementation:</t>
            <artwork><![CDATA[
DecPartial(cn)
ks = AESL(S0 ^ S1) ^ ZeroPad(cn, 128) ^ S9
ci = cn || Tail(ks, 128 - |cn|)
mi = UpdateDec(ci)
mn = Truncate(mi, |cn|)
return mn
]]></artwork>
            <t>Intel-optimized implementation:</t>
            <artwork><![CDATA[
DecPartial_Intel(cn)
ks = AESLX(S0 ^ S1, ZeroPad(cn, 128) ^ S9)
ci = cn || Tail(ks, 128 - |cn|)
mi = UpdateDec_Intel(ci)
mn = Truncate(mi, |cn|)
return mn
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="decryption-performance">
        <name>Decryption Performance</name>
        <t>It is expected that HiAE decryption will be slower than encryption due to inherent data dependencies in the algorithm. While encryption can process keystream generation and state updates in parallel, decryption must first recover the plaintext before performing any state updates. This sequential dependency chain is a consequence of HiAE’s design, which incorporates plaintext into the internal state to provide strong authentication properties.</t>
      </section>
      <section anchor="security-considerations-for-implementations">
        <name>Security Considerations for Implementations</name>
        <t>The security of HiAE against timing and physical attacks is limited by the implementation of the underlying <tt>AESL</tt> function. Failure to implement <tt>AESL</tt> in a fashion safe against timing and physical attacks, such as differential power analysis, timing analysis, or fault injection attacks, may lead to leakage of secret key material or state information. The exact mitigations required for timing and physical attacks depend on the threat model in question.</t>
        <t>When implementing the platform-specific optimizations described above, care must be taken to ensure that:</t>
        <ul spacing="normal">
          <li>
            <t>All operations complete in constant time</t>
          </li>
          <li>
            <t>No secret-dependent memory accesses occur</t>
          </li>
          <li>
            <t>The optimization does not introduce timing variations based on input data</t>
          </li>
        </ul>
      </section>
      <section anchor="validation">
        <name>Validation</name>
        <t>A complete list of known implementations and integrations is available at https://github.com/hiae-aead/draft-pham-cfrg-hiae, including reference implementations. A comprehensive comparison of HiAE’s performance with other high-throughput authenticated encryption schemes on ARM and x86 architectures is also provided, demonstrating the effectiveness of these platform-specific optimizations.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the following entry in the AEAD Algorithms Registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Algorithm Name</th>
            <th align="left">ID</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>AEAD_HIAE</tt></td>
            <td align="left"> </td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS-AES" target="https://doi.org/10.6028/NIST.FIPS.197-upd1">
          <front>
            <title>Advanced Encryption Standard (AES)</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2023" month="May"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.197-upd1"/>
          <refcontent>Federal Information Processing Standards Publication 197, Update 1</refcontent>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aegis-aead">
          <front>
            <title>The AEGIS Family of Authenticated Encryption Algorithms</title>
            <author fullname="Frank Denis" initials="F." surname="Denis">
              <organization>Fastly Inc.</organization>
            </author>
            <author fullname="Samuel Lucas" initials="S." surname="Lucas">
              <organization>Individual Contributor</organization>
            </author>
            <date day="5" month="October" year="2025"/>
            <abstract>
              <t>   This document describes the AEGIS-128L, AEGIS-256, AEGIS-128X, and
   AEGIS-256X AES-based authenticated encryption algorithms designed for
   high-performance applications.

   The document is a product of the Crypto Forum Research Group (CFRG).
   It is not an IETF product and is not a standard.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/cfrg/draft-irtf-cfrg-aegis-aead.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aegis-aead-18"/>
        </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>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ROCCA-S">
          <front>
            <title>An Ultra-High Throughput AES-Based Authenticated Encryption Scheme for 6G: Design and Implementation</title>
            <author initials="R." surname="Anand" fullname="Ravi Anand">
              <organization/>
            </author>
            <author initials="S." surname="Banik" fullname="Subhadeep Banik">
              <organization/>
            </author>
            <author initials="A." surname="Caforio" fullname="Andrea Caforio">
              <organization/>
            </author>
            <author initials="K." surname="Fukushima" fullname="Kazuhide Fukushima">
              <organization/>
            </author>
            <author initials="T." surname="Isobe" fullname="Takanori Isobe">
              <organization/>
            </author>
            <author initials="S." surname="Kiyomoto" fullname="Shisaku Kiyomoto">
              <organization/>
            </author>
            <author initials="F." surname="Liu" fullname="Fukang Liu">
              <organization/>
            </author>
            <author initials="Y." surname="Nakano" fullname="Yuto Nakano">
              <organization/>
            </author>
            <author initials="K." surname="Sakamoto" fullname="Kosei Sakamoto">
              <organization/>
            </author>
            <author initials="N." surname="Takeuchi" fullname="Nobuyuki Takeuchi">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-031-50594-2_12"/>
          <refcontent>Computer Security – ESORICS 2023</refcontent>
        </reference>
        <reference anchor="SNOW-V">
          <front>
            <title>A new SNOW stream cipher called SNOW-V</title>
            <author initials="P." surname="Ekdahl" fullname="Patrik Ekdahl">
              <organization>Ericsson Research</organization>
            </author>
            <author initials="T." surname="Johansson" fullname="Thomas Johansson">
              <organization>Lund University</organization>
            </author>
            <author initials="A." surname="Maximov" fullname="Alexander Maximov">
              <organization>Ericsson Research</organization>
            </author>
            <author initials="J." surname="Yang" fullname="Jing Yang">
              <organization>Ericsson Research</organization>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="DOI" value="10.13154/tosc.v2019.i3.1-42"/>
          <refcontent>IACR Transactions on Symmetric Cryptology, 2019(3)</refcontent>
        </reference>
        <reference anchor="AES-NI" target="https://www.intel.com/content/dam/doc/white-paper/advanced-encryption-standard-new-instructions-set-paper.pdf">
          <front>
            <title>Intel Advanced Encryption Standard (AES) New Instructions Set</title>
            <author initials="S." surname="Gueron" fullname="Shay Gueron">
              <organization>Intel Corporation</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="HiAE" target="https://eprint.iacr.org/2025/377">
          <front>
            <title>HiAE: A High-Throughput Authenticated Encryption Algorithm for Cross-Platform Efficiency</title>
            <author initials="H." surname="Chen" fullname="Han Chen">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <author initials="T." surname="Huang" fullname="Tao Huang">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <author initials="P." surname="Pham" fullname="Phuong Pham">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <author initials="S." surname="Wu" fullname="Shuang Wu">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <date year="2025"/>
          </front>
          <refcontent>Cryptology ePrint Archive, Paper 2025/377</refcontent>
        </reference>
        <reference anchor="HiAE-Clarification" target="https://eprint.iacr.org/2025/1235">
          <front>
            <title>HiAE Remains Secure in Its Intended Model: A Clarification of Claimed Attacks</title>
            <author initials="H." surname="Chen" fullname="Han Chen">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <author initials="T." surname="Huang" fullname="Tao Huang">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <author initials="P." surname="Pham" fullname="Phuong Pham">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <author initials="S." surname="Wu" fullname="Shuang Wu">
              <organization>Huawei International Pte., Ltd.</organization>
            </author>
            <date year="2025"/>
          </front>
          <refcontent>Cryptology ePrint Archive, Paper 2025/1235</refcontent>
        </reference>
      </references>
    </references>
    <?line 1156?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <section anchor="test-vector-1-empty-plaintext-no-ad">
        <name>Test Vector 1 - Empty plaintext, no AD</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 4b7a9c3ef8d2165a0b3e5f8c9d4a7b1e
        2c5f8a9d3b6e4c7f0a1d2e5b8c9f4a7d

nonce : a5b8c2d9e3f4a7b1c8d5e9f2a3b6c7d8

ad    :

msg   :

ct    :

tag   : a25049aa37deea054de461d10ce7840b
]]></sourcecode>
      </section>
      <section anchor="test-vector-2-single-block-plaintext-no-ad">
        <name>Test Vector 2 - Single block plaintext, no AD</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 2f8e4d7c3b9a5e1f8d2c6b4a9f3e7d5c
        1b8a6f4e3d2c9b5a8f7e6d4c3b2a1f9e

nonce : 7c3e9f5a1d8b4c6f2e9a5d7b3f8c1e4a

ad    :

msg   : 55f00fcc339669aa55f00fcc339669aa

ct    : af9bd1865daa6fc351652589abf70bff

tag   : ed9e2edc8241c3184fc08972bd8e9952
]]></sourcecode>
      </section>
      <section anchor="test-vector-3-empty-plaintext-with-ad">
        <name>Test Vector 3 - Empty plaintext with AD</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 9f3e7d5c4b8a2f1e9d8c7b6a5f4e3d2c
        1b0a9f8e7d6c5b4a3f2e1d0c9b8a7f6e

nonce : 3d8c7f2a5b9e4c1f8a6d3b7e5c2f9a4d

ad    : 394a5b6c7d8e9fb0c1d2e3f405162738
        495a6b7c8d9eafc0d1e2f30415263748

msg   :

ct    :

tag   : 7e19c04f68f5af633bf67529cfb5e5f4
]]></sourcecode>
      </section>
      <section anchor="test-vector-4-rate-aligned-plaintext-256-bytes">
        <name>Test Vector 4 - Rate-aligned plaintext (256 bytes)</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 6c8f2d5a9e3b7f4c1d8a5e9f3c7b2d6a
        4f8e1c9b5d3a7e2f4c8b6d9a1e5f3c7d

nonce : 9a5c7e3f1b8d4a6c2e9f5b7d3a8c1e6f

ad    :

msg   : ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff
        ffffffffffffffffffffffffffffffff

ct    : cf9f118ccc3ae98998ddaae1a5d1f9a1
        69e4ca3e732baf7178cdd9a353057166
        8fe403e77111eac3da34bf2f25719cea
        09445cc58197b1c6ac490626724e7372
        707cfb60cdba8262f0e33a1ef8adda1f
        2e390a80c58e5c055d9be9bbccdc06ad
        af74f1dcaa372204bf42e5e0e0ac5943
        7a353978298837023f79fac6daa1fe8f
        6bcaaaf060ae2e37ed7b7da0577a7643
        5f0403b8e277b6bc2ea99682f2d0d577
        77fec6d901e0d8fc7cf46bb97336812a
        2d8cfd39053993288cce2c077fce0c6c
        00e99cf919281b261acf86b058164f10
        1d9c24e8f40b4fa0ed60955eeeb4e33f
        f1087519c13db8e287199a7df7e94b0d
        368da9ccf3d2ecebfa46f860348f8e3c

tag   : 4f42c3042cba3973153673156309dd69
]]></sourcecode>
      </section>
      <section anchor="test-vector-5-rate-1-byte-plaintext">
        <name>Test Vector 5 - Rate + 1 byte plaintext</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 3e9d6c5b4a8f7e2d1c9b8a7f6e5d4c3b
        2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d

nonce : 6f2e8a5c9b3d7f1e4a8c5b9d3f7e2a6c

ad    : 6778899aabbccddeef00112233445566

msg   : cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc339669aa55f00fcc339669aa55f00f
        cc

ct    : 522e4cd9b0881809d80e149bb4ed8b8a
        dd70b7257afca6c2bc38e4da11e290cf
        cabd9dd1d4ed8c514482f444f903e42e
        c21a7a605ee37f95a504ec667fabec40
        66eb4521cdaf9c4eb7b62d659ab0a936
        3b145f1120c1b2e589ab9cb893d01be0
        d22182fc7de4932f1e8652b50e4a0d48
        c49a8a1232b201e2e535cd95c15cf0ee
        389b75e372653579c72c4dd1906fd81c
        2b9fc2483fab8b4df5a09d59753b5bd4
        1334be2e5085e349b6e5aac0c555a0a8
        3e94eab974052131f8d451c9d85389a3
        6126f93464e6f93119c6b1bf15b4c0a9
        e6c9beb52e82c846c472f87c15ac49e9
        9d59248ba7e6b97ca04327769d6b8c1f
        751d95dba709fb335183c21476836ea1
        ab

tag   : 61bac11505dd8bbf55e7fbb7489de7b0
]]></sourcecode>
      </section>
      <section anchor="test-vector-6-rate-1-byte-plaintext">
        <name>Test Vector 6 - Rate - 1 byte plaintext</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e3d
        2c1b0a9f8e7d6c5b4a3f2e1d0c9b8a7f

nonce : 4d8b2f6a9c3e7f5d1b8a4c6e9f3d5b7a

ad    :

msg   : 00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        000000000000000000000000000000

ct    : 2ba49be54eb675efe446fd597721d4cd
        ca6e01f1a51728a859d8f206d13cdb08
        ba4f0fe78fbbd6885964ed54e9beceed
        1ff306642c4761e67efa7a2620e57128
        15b5e9f066b42e879cd62e7adc2821e5
        08311b88a6ee14bedcbac7ce339994c0
        09bbbadf9444748e4ab9a91acbbc7301
        742dab74aa1be6847ad8e9f08c170359
        b87e0ccd480812aaaf847aff03c2e858
        1c55848c2b50f6c6608540fe82627a2c
        0f5ee37fbe9cdeab5f6c9799702bd303
        2bf733e2108d03247cd20edaa2c322e5
        bf086bfecc4ac97b61096f016c57d5d0
        1c24d398cefd5ae8131c1f51f172ce9c
        6d3b8395d396dcbd70b4af790018796b
        31f0b0ad6198f86e5e1f26e9258492

tag   : 221dd1b69afb4e0c149e0a058e471a4a
]]></sourcecode>
      </section>
      <section anchor="test-vector-7-medium-plaintext-with-ad">
        <name>Test Vector 7 - Medium plaintext with AD</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 5d9c3b7a8f2e6d4c1b9a8f7e6d5c4b3a
        2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d7c

nonce : 8c5a7d3f9b1e6c4a2f8d5b9e3c7a1f6d

ad    : 95a6b7c8d9eafb0c1d2e3f5061728394
        a5b6c7d8e9fa0b1c2d3e4f60718293a4
        b5c6d7e8f90a1b2c3d4e5f708192a3b4
        c5d6e7f8091a2b3c4d5e6f8091a2b3c4

msg   : 32e14453e7a776781d4c4e2c3b23bca2
        441ee4213bc3df25021b5106c22c98e8
        a7b310142252c8dcff70a91d55cdc910
        3c1eccd9b5309ef21793a664e0d4b63c
        83530dcd1a6ad0feda6ff19153e9ee62
        0325c1cb979d7b32e54f41da3af1c169
        a24c47c1f6673e115f0cb73e8c507f15
        eedf155261962f2d175c9ba3832f4933
        fb330d28ad6aae787f12788706f45c92
        e72aea146959d2d4fa01869f7d072a7b
        f43b2e75265e1a000dde451b64658919
        e93143d2781955fb4ca2a38076ac9eb4
        9adc2b92b05f0ec7

ct    : 1d8d56867870574d1c4ac114620c6a2a
        bb44680fe321dd116601e2c92540f85a
        11c41dcac9814397b8f37b812cd52c93
        2db6ecbaa247c3e14f228bd792334570
        2fc43ad1eb1b8086e2c3c57bb602971c
        29772a35dfb1c45c66f81633e67fdc8d
        8005457ddbe4179312abab981049eb0a
        0a555b9fa01378878d7349111e2446fd
        e89ce64022d032cbf0cf2672e00d7999
        ed8b631c1b9bee547cbe464673464a4b
        80e8f72ad2b91a40fdcee5357980c090
        b34ab5e732e2a7df7613131ee42e42ec
        6ae9b05ac5683ebe

tag   : e93686b266c481196d44536eb51b5f2d
]]></sourcecode>
      </section>
      <section anchor="test-vector-8-single-byte-plaintext">
        <name>Test Vector 8 - Single byte plaintext</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2e
        1d0c9b8a7f6e5d4c3b2a1f0e9d8c7b6a

nonce : 2e7c9f5d3b8a4c6f1e9b5d7a3f8c2e4a

ad    :

msg   : ff

ct    : 21

tag   : 3cf9020bd1cc59cc5f2f6ce19f7cbf68
]]></sourcecode>
      </section>
      <section anchor="test-vector-9-two-blocks-plaintext">
        <name>Test Vector 9 - Two blocks plaintext</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 4c8b7a9f3e5d2c6b1a8f9e7d6c5b4a3f
        2e1d0c9b8a7f6e5d4c3b2a1f0e9d8c7b

nonce : 7e3c9a5f1d8b4e6c2a9f5d7b3e8c1a4f

ad    : c3d4e5f60718293a4b5c6d7e8fa0b1c2
        d3e4f5061728394a5b6c7d8e9fb0c1d2
        e3f405162738495a6b7c8d9eafc0d1e2

msg   : aa55f00fcc339669aa55f00fcc339669
        aa55f00fcc339669aa55f00fcc339669

ct    : c2e199ac8c23ce6e3778e7fd0b4f8f75
        2badd4b67be0cdc3f6c98ae5f6fb0d25

tag   : 7aea3fbce699ceb1d0737e0483217745
]]></sourcecode>
      </section>
      <section anchor="test-vector-10-all-zeros-plaintext">
        <name>Test Vector 10 - All zeros plaintext</name>
        <sourcecode type="test-vectors"><![CDATA[
key   : 9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b
        3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d

nonce : 5f9d3b7e2c8a4f6d1b9e5c7a3d8f2b6e

ad    : daebfc0d1e2f405162738495a6b7c8d9

msg   : 00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000
        00000000000000000000000000000000

ct    : fc7f1142f681399099c5008980e73420
        65b4e62a9b9cb301bdf441d3282b6aa9
        3bd7cd735ef77755b4109f86b7c09083
        8e7b05f08ef4947946155a03ff483095
        152ef3dec8bdddae3990d00d41d5ee6c
        90dcf65dbed4b7ebbe9bb4ef096e1238
        d388bf15faacdb7a68be19dddc8a5b74
        216f4442bfa32d1dfccdc9c4020baec9

tag   : ad0b841c3d145a6ee86dc7b67338f113
]]></sourcecode>
      </section>
      <section anchor="test-vector-11-partial-block-ad-padding-demonstration">
        <name>Test Vector 11 - Partial-block AD (padding demonstration)</name>
        <t>This test vector specifically demonstrates the padding behavior when associated data length is not a multiple of the block size (128 bits). The AD is 13 bytes (104 bits), which requires 3 bytes (24 bits) of zero padding to reach the next block boundary.</t>
        <sourcecode type="test-vectors"><![CDATA[
key   : 11223344556677881122334455667788
        11223344556677881122334455667788

nonce : aabbccddeeff0011aabbccddeeff0011

ad    : 0102030405060708090a0b0c0d
        (13 bytes - padded to 16 bytes with zeros)

msg   : 48656c6c6f576f726c64
        (10 bytes)

ct    : 1fb0e0348c6a3a917133

tag   : 7d292173b55ba02dae56ac1224b7e775
]]></sourcecode>
      </section>
    </section>
    <section anchor="function-by-function-example">
      <name>Function-by-Function Example</name>
      <t>This appendix provides step-by-step examples of HiAE internal functions for implementers. All values are in hexadecimal. The examples use the following test data:</t>
      <ul spacing="normal">
        <li>
          <t>Key: <tt>0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef</tt></t>
        </li>
        <li>
          <t>Nonce: <tt>00112233445566778899aabbccddeeff</tt></t>
        </li>
        <li>
          <t>AD: <tt>48656c6c6f</tt> (5 bytes: “Hello”)</t>
        </li>
        <li>
          <t>Msg: <tt>576f726c64</tt> (5 bytes: “World”)</t>
        </li>
      </ul>
      <section anchor="aesl-function-example">
        <name>AESL Function Example</name>
        <t>The AESL function performs a single AES encryption round with a zero round key.</t>
        <artwork><![CDATA[
Input Block:  00112233445566778899aabbccddeeff

Output Block: 6379e6d9f467fb76ad063cf4d2eb8aa3
]]></artwork>
      </section>
      <section anchor="initialize-function-example">
        <name>Initialize Function Example</name>
        <t>The Initialize function sets up the initial state from the key and nonce.</t>
        <artwork><![CDATA[
Key:   0123456789abcdef0123456789abcdef
       0123456789abcdef0123456789abcdef
Nonce: 00112233445566778899aabbccddeeff

Initial state (before diffusion rounds):
  S0:  3243f6a8885a308d313198a2e0370734
  S1:  0123456789abcdef0123456789abcdef
  S2:  3243f6a8885a308d313198a2e0370734
  S3:  00112233445566778899aabbccddeeff
  S4:  00000000000000000000000000000000
  S5:  0123456789abcdef0123456789abcdef
  S6:  00000000000000000000000000000000
  S7:  4a4093822299f31d0082efa98ec4e6c8
  S8:  0123456789abcdef0123456789abcdef
  S9:  00000000000000000000000000000000
  S10: 01326754cdfeab9889baefdc45762310
  S11: 3243f6a8885a308d313198a2e0370734
  S12: 4a4093822299f31d0082efa98ec4e6c8
  S13: 0123456789abcdef0123456789abcdef
  S14: 00000000000000000000000000000000
  S15: 7803652aaac3c39031b3770b6ef3e1fc

State after Init (after diffusion):
  S0:  2a622bda4d229c9fc4b7d1a25399e321
  S1:  a04980e6407654f2760e59be74c05f9c
  S2:  308859e5787ab6c1705abbaecebfc316
  S3:  04782e5069799e9f3e325836a2ff3bcc
  S4:  007a12163596057152dc58a0f78cef2c
  S5:  7ce304cf04de20f8116cef51eea19e24
  S6:  c554da7a91164fc30e38c76ec038e66a
  S7:  3edcba33d2a5d02a4b598c5ffa003513
  S8:  50db6b4f18b7e282b8918311685abc18
  S9:  4253eebe1b72fec70ac3ec478cf9f2f2
  S10: 6bc09743dc45ba191c18a0d275ef9a8f
  S11: 251524aba97200f5b31eeeecb0f0a1c1
  S12: e1a99d3dd105e14085d6a0200f1d0c35
  S13: a4730f9d0f36ad7c67880342deed5310
  S14: 7d6ca34814e6e065c8cb4fa11ba2f8c4
  S15: 2b545cefe484f2e0ba5fb6359faffeca
]]></artwork>
      </section>
      <section anchor="update-function-example">
        <name>Update Function Example</name>
        <t>The Update function modifies the internal state with an input block.</t>
        <artwork><![CDATA[
Initial state (after initialization):
  S0:  2a622bda4d229c9fc4b7d1a25399e321
  S1:  a04980e6407654f2760e59be74c05f9c
  S2:  308859e5787ab6c1705abbaecebfc316
  S3:  04782e5069799e9f3e325836a2ff3bcc
  S4:  007a12163596057152dc58a0f78cef2c
  S5:  7ce304cf04de20f8116cef51eea19e24
  S6:  c554da7a91164fc30e38c76ec038e66a
  S7:  3edcba33d2a5d02a4b598c5ffa003513
  S8:  50db6b4f18b7e282b8918311685abc18
  S9:  4253eebe1b72fec70ac3ec478cf9f2f2
  S10: 6bc09743dc45ba191c18a0d275ef9a8f
  S11: 251524aba97200f5b31eeeecb0f0a1c1
  S12: e1a99d3dd105e14085d6a0200f1d0c35
  S13: a4730f9d0f36ad7c67880342deed5310
  S14: 7d6ca34814e6e065c8cb4fa11ba2f8c4
  S15: 2b545cefe484f2e0ba5fb6359faffeca

Input block: 48656c6c6f0000000000000000000000

After applying the Update function:
  S0:  a04980e6407654f2760e59be74c05f9c
  S1:  308859e5787ab6c1705abbaecebfc316
  S2:  4c1d423c06799e9f3e325836a2ff3bcc
  S3:  007a12163596057152dc58a0f78cef2c
  S4:  7ce304cf04de20f8116cef51eea19e24
  S5:  c554da7a91164fc30e38c76ec038e66a
  S6:  3edcba33d2a5d02a4b598c5ffa003513
  S7:  50db6b4f18b7e282b8918311685abc18
  S8:  4253eebe1b72fec70ac3ec478cf9f2f2
  S9:  6bc09743dc45ba191c18a0d275ef9a8f
  S10: 251524aba97200f5b31eeeecb0f0a1c1
  S11: e1a99d3dd105e14085d6a0200f1d0c35
  S12: ec1663f16036ad7c67880342deed5310
  S13: 7d6ca34814e6e065c8cb4fa11ba2f8c4
  S14: 2b545cefe484f2e0ba5fb6359faffeca
  S15: 4672d0d4a6a8fc93fe85701ff61a9e10
]]></artwork>
      </section>
      <section anchor="enc-function-example">
        <name>Enc Function Example</name>
        <t>The Enc function encrypts a single message block.</t>
        <artwork><![CDATA[
State (after processing AD "Hello"):
  S0:  a04980e6407654f2760e59be74c05f9c
  S1:  308859e5787ab6c1705abbaecebfc316
  S2:  4c1d423c06799e9f3e325836a2ff3bcc
  S3:  007a12163596057152dc58a0f78cef2c
  S4:  7ce304cf04de20f8116cef51eea19e24
  S5:  c554da7a91164fc30e38c76ec038e66a
  S6:  3edcba33d2a5d02a4b598c5ffa003513
  S7:  50db6b4f18b7e282b8918311685abc18
  S8:  4253eebe1b72fec70ac3ec478cf9f2f2
  S9:  6bc09743dc45ba191c18a0d275ef9a8f
  S10: 251524aba97200f5b31eeeecb0f0a1c1
  S11: e1a99d3dd105e14085d6a0200f1d0c35
  S12: ec1663f16036ad7c67880342deed5310
  S13: 7d6ca34814e6e065c8cb4fa11ba2f8c4
  S14: 2b545cefe484f2e0ba5fb6359faffeca
  S15: 4672d0d4a6a8fc93fe85701ff61a9e10

Message Block: 576f726c640000000000000000000000

Ciphertext Block: 03e5d2157300b718595429195c9278e7

Updated State after Enc:
  S0:  308859e5787ab6c1705abbaecebfc316
  S1:  4c1d423c06799e9f3e325836a2ff3bcc
  S2:  5715607a5196057152dc58a0f78cef2c
  S3:  7ce304cf04de20f8116cef51eea19e24
  S4:  c554da7a91164fc30e38c76ec038e66a
  S5:  3edcba33d2a5d02a4b598c5ffa003513
  S6:  50db6b4f18b7e282b8918311685abc18
  S7:  4253eebe1b72fec70ac3ec478cf9f2f2
  S8:  6bc09743dc45ba191c18a0d275ef9a8f
  S9:  251524aba97200f5b31eeeecb0f0a1c1
  S10: e1a99d3dd105e14085d6a0200f1d0c35
  S11: ec1663f16036ad7c67880342deed5310
  S12: 2a03d12470e6e065c8cb4fa11ba2f8c4
  S13: 2b545cefe484f2e0ba5fb6359faffeca
  S14: 4672d0d4a6a8fc93fe85701ff61a9e10
  S15: 9c56037e72109cee878398424f789257
]]></artwork>
      </section>
      <section anchor="finalize-function-example">
        <name>Finalize Function Example</name>
        <t>The Finalize function produces the authentication tag.</t>
        <artwork><![CDATA[
State (after processing the AD and message):
  S0:  308859e5787ab6c1705abbaecebfc316
  S1:  4c1d423c06799e9f3e325836a2ff3bcc
  S2:  5715607a5196057152dc58a0f78cef2c
  S3:  7ce304cf04de20f8116cef51eea19e24
  S4:  c554da7a91164fc30e38c76ec038e66a
  S5:  3edcba33d2a5d02a4b598c5ffa003513
  S6:  50db6b4f18b7e282b8918311685abc18
  S7:  4253eebe1b72fec70ac3ec478cf9f2f2
  S8:  6bc09743dc45ba191c18a0d275ef9a8f
  S9:  251524aba97200f5b31eeeecb0f0a1c1
  S10: e1a99d3dd105e14085d6a0200f1d0c35
  S11: ec1663f16036ad7c67880342deed5310
  S12: 2a03d12470e6e065c8cb4fa11ba2f8c4
  S13: 2b545cefe484f2e0ba5fb6359faffeca
  S14: 4672d0d4a6a8fc93fe85701ff61a9e10
  S15: 9c56037e72109cee878398424f789257

AD length:  5 bytes (40 bits)
Msg length: 5 bytes (40 bits)

Length encoding block: 2800000000000000 2800000000000000
                      (40 bits)        (40 bits)

Tag = S0 ^ S1 ^ ... ^ S15 = 45178cd06ef0a8bed8e9082fe49ec818
]]></artwork>
      </section>
      <section anchor="complete-encryption-example">
        <name>Complete Encryption Example</name>
        <artwork><![CDATA[
Key:       0123456789abcdef0123456789abcdef
           0123456789abcdef0123456789abcdef
Nonce:     00112233445566778899aabbccddeeff
AD:        48656c6c6f ("Hello")
Plaintext: 576f726c64 ("World")

Ciphertext: 03e5d21573
Tag:        45178cd06ef0a8bed8e9082fe49ec818
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The HiAE algorithm leverages the AES permutation invented by Joan Daemen and Vincent Rijmen.</t>
      <t>We would like to thank Samuel Lucas for his review of the draft.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
6JBQ+oOHHz7k+06jj1NwN6zOzcxcNG0XIm1tBqPt1XNVgEcCoz+RboTB0bnn
LDO5HZ/IzhuEnHi0c7SvOgNdmiMFv789UmmDQ+7i4uuzyHn7iIJMUk4+QnYM
N5yxO0yc+0HOaZ10/t1x8h1CWZGN3n6QvUuij5tRcd/vFCTH3i0dv6a/6NYN
ACQDxsQJGw7dOccHQnXIWcnH4tkD1untJ96//7f/QTTw4hxaQAWutc5C63Py
uUHwvH1q59F8DNLR5RED+epNxDeOvR+GYALC738YgjhEmgvWHcA+Qe8PgigX
q6iHi8E40vs/QAyTV70VubWJ75URtEMxdLq1ve8vuPfN2fpG0N1l4w5geIeW
DhzfaUCO94HjYTDuxNSwfHcfZJk61b/WJjEF9agKdm80AjrG5OxOTO4P4ecA
eCeCh3W7+yDYlPf9tTZTDeCffS6CAR0j+C4Ix+j+i0G4A8M763nvR/Go0vcz
ykcfqu3cUaB5V0XlqKByD9xbsBXyDegsmQcoP94CH7eLo88Ev1/iPafwC97d
5BwoO9LYW7aC+2mW+7X07RFpGL2NEqr3d5JfUFr0br1rrEB7CvN3h9v6S4+A
Ff7Bbr/uT+h6UHWRnn35oH4dH417OFRgjJv/h1WYgm8/JcZtR7B8Z4A59vhB
D8t3BAzXdu4Nyz0I+0+iyT4Dm6TLFEIZyqrdRuhMyd4tUfwAjj9Hqe3G9n8S
tfYZ2Capp7B9H5QO7tcP0/LnqLYxnv8/UW57rYCj3vQSuOA7ON8J/WcrN7vM
e6s354A077V1ak3VgzkoSFUN6C/S9C/wh5Io2edk9Jy4Wb1RCZ35tXLoOSBl
zlitdARg7aZ4TvQZ7k4npBPN5og7i57dkwm4V3O46rEL7mxDeVz+4MLusw/M
rlabmaEykkHnOg3iHD/eT4hOPaSoPB+Xz6E09S0CUwv9S5NuM9GwwV4OC8Ud
ey3dwz/05wK395AAdPqgj85E7S5e4kjRqMJHp1rMC6Z6u0/1txobtQ029xl2
na5T1SIM9zCwp2NwHOpRZapsnjglpt5TEPdGfWvHxnl0K/bBG9Fdc32NaOQ+
UB33EcJBVcCS6dTkUo9tD+YGbWbhwu12/gd9/mnfI8Vap5S8A5T4970u67WF
cXYXNh11sFbF1v0JPyqbqU+ShzV3pVejL9/kbZz3IFoRmqnxpXCEWKu8MeEI
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
qMTONe/5/9DKjyaFyEconBz8H+z4Bzq7xgAA

-->

</rfc>
