<?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.6.29 (Ruby 3.1.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-aegis-aead-03" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title>The AEGIS Family of Authenticated Encryption Algorithms</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aegis-aead-03"/>
    <author initials="F." surname="Denis" fullname="Frank Denis">
      <organization>Fastly Inc.</organization>
      <address>
        <email>fde@00f.net</email>
      </address>
    </author>
    <author initials="F. E. R." surname="Scotoni" fullname="Fabio Enrico Renzo Scotoni">
      <organization>Individual Contributor</organization>
      <address>
        <email>fabio@esse.ch</email>
      </address>
    </author>
    <author initials="S." surname="Lucas" fullname="Samuel Lucas">
      <organization>Individual Contributor</organization>
      <address>
        <email>samuel-lucas6@pm.me</email>
      </address>
    </author>
    <date year="2023" month="April" day="28"/>
    <workgroup>Crypto Forum</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes AEGIS-128L and AEGIS-256, two AES-based authenticated encryption algorithms designed for high-performance applications.
This document is a product of the Crypto Forum Research Group (CFRG). It is not an IETF product and is not a standard.</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/jedisct1/draft-aegis-aead"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes the AEGIS-128L and AEGIS-256 authenticated encryption with associated data (AEAD) algorithms <xref target="AEGIS"/>, which were chosen as additional finalists for high-performance applications in the Competition for Authenticated Encryption: Security, Applicability, and Robustness (CAESAR). Whilst AEGIS-128 was selected as a winner for this use case, AEGIS-128L has a better security margin alongside improved performance and AEGIS-256 uses a 256-bit key <xref target="LIMS21"/>. All variants of AEGIS are constructed from the AES encryption round function <xref target="FIPS-AES"/>. This document specifies:</t>
      <ul spacing="normal">
        <li>AEGIS-128L, which has a 128-bit key, a 128-bit nonce, a 1024-bit state, a 128- or 256-bit authentication tag, and processes 256-bit input blocks.</li>
        <li>AEGIS-256, which has a 256-bit key, a 256-bit nonce, a 768-bit state, a 128- or 256-bit authentication tag, and processes 128-bit input blocks.</li>
      </ul>
      <t>The AEGIS cipher family offers performance that significantly exceeds that of AES-GCM with hardware support for parallelizable AES block encryption <xref target="AEGIS"/>. Similarly, software implementations can also be faster, although to a lesser extent.</t>
      <t>Unlike with AES-GCM, nonces can be safely chosen at random with no practical limit when using AEGIS-256. AEGIS-128L also allows for more messages to be safely encrypted when using random nonces.</t>
      <t>With some existing AEAD schemes, such as AES-GCM, an attacker can generate a ciphertext that successfully decrypts under multiple different keys (a partitioning oracle attack) <xref target="LGR21"/>. This ability to craft a (ciphertext, authentication tag) pair that verifies under multiple keys significantly reduces the number of required interactions with the oracle in order to perform an exhaustive search, making it practical if the key space is small. For example, with password-based encryption, an attacker can guess a large number of passwords at a time by recursively submitting such a ciphertext to an oracle, which speeds up a password search by reducing it to a binary search.</t>
      <t>In a fully committing AEAD scheme, finding different inputs (key, nonce, associated data, message) producing the same authentication tag has a complexity that depends on the tag size. A 128-bit tag provides 64-bit committing security, which is generally acceptable for interactive protocols. With a 256-bit tag, finding a collision becomes impractical. As of the time of writing, no research has been published claiming that AEGIS is not a fully committing AEAD scheme.</t>
      <t>Finally, unlike most other AES-based AEAD constructions, leaking a state does not leak the previous states.</t>
      <t>Note that an earlier version of Hongjun Wu and Bart Preneel’s paper introducing AEGIS specified AEGIS-128L and AEGIS-256 sporting differences with regards to the computation of the authentication tag and the number of rounds in <tt>Finalize()</tt> respectively. We follow the specification of <xref target="AEGIS"/> that is current at the time of writing, which can be found in the References section of this document.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words “<bcp14>MUST</bcp14>”, “<bcp14>MUST NOT</bcp14>”, “<bcp14>REQUIRED</bcp14>”, “<bcp14>SHALL</bcp14>”, “<bcp14>SHALL
NOT</bcp14>”, “<bcp14>SHOULD</bcp14>”, “<bcp14>SHOULD NOT</bcp14>”, “<bcp14>RECOMMENDED</bcp14>”, “<bcp14>NOT RECOMMENDED</bcp14>”,
“<bcp14>MAY</bcp14>”, and “<bcp14>OPTIONAL</bcp14>” in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>Primitives:</t>
      <ul spacing="normal">
        <li>
          <tt>|x|</tt>: the length of <tt>x</tt> in bits.</li>
        <li>
          <tt>a ^ b</tt>: the bitwise exclusive OR operation between <tt>a</tt> and <tt>b</tt>.</li>
        <li>
          <tt>a &amp; b</tt>: the bitwise AND operation between <tt>a</tt> and <tt>b</tt>.</li>
        <li>
          <tt>a || b</tt>: the concatenation of <tt>a</tt> and <tt>b</tt>.</li>
        <li>
          <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.</li>
        <li>
          <tt>LE64(x)</tt>: the little-endian encoding of unsigned 64-bit integer <tt>x</tt>.</li>
        <li>
          <tt>ZeroPad(x, n)</tt>: padding operation. Trailing zeros are concatenated to <tt>x</tt> until the total length is a multiple of <tt>n</tt> bits.</li>
        <li>
          <tt>Truncate(x, n)</tt>: truncation operation. The first <tt>n</tt> bits of <tt>x</tt> are kept.</li>
        <li>
          <tt>Split(x, n)</tt>: splitting operation. <tt>x</tt> is split into <tt>n</tt>-bit blocks, ignoring partial blocks.</li>
        <li>
          <tt>Tail(x, n)</tt>: returns the last <tt>n</tt> bits of <tt>x</tt>.</li>
        <li>
          <tt>AESRound(in, rk)</tt>: a single round of the AES encryption round function, which is the composition of the <tt>SubBytes</tt>, <tt>ShiftRows</tt>, <tt>MixColums</tt> and <tt>AddRoundKey</tt> transformations, as defined in section 5 of <xref target="FIPS-AES"/>. Here, <tt>in</tt> is the 128-bit AES input state, and <tt>rk</tt> is the 128-bit round key.</li>
        <li>
          <tt>Repeat(n, F)</tt>: <tt>n</tt> sequential evaluations of the function <tt>F</tt>.</li>
        <li>
          <tt>CtEq(a, b)</tt>: compares <tt>a</tt> and <tt>b</tt> in constant-time, returning <tt>True</tt> for an exact match, <tt>False</tt> otherwise.</li>
      </ul>
      <t>AEGIS internal functions:</t>
      <ul spacing="normal">
        <li>
          <tt>Update(M0, M1)</tt>: the state update function.</li>
        <li>
          <tt>Init(key, nonce)</tt>: the initialization function.</li>
        <li>
          <tt>Absorb(ai)</tt>: the input block absorption function.</li>
        <li>
          <tt>Enc(xi)</tt>: the input block encryption function.</li>
        <li>
          <tt>Dec(ci)</tt>: the input block decryption function.</li>
        <li>
          <tt>DecPartial(cn)</tt>: the input block decryption function for the last ciphertext bits when they do not fill an entire block.</li>
        <li>
          <tt>Finalize(ad_len_bits, msg_len_bits)</tt>: the authentication tag generation function.</li>
      </ul>
      <t>Input blocks are 256 bits for AEGIS-128L and 128 bits for AEGIS-256.</t>
      <t>AES blocks:</t>
      <ul spacing="normal">
        <li>
          <tt>Si</tt>: the <tt>i</tt>-th AES block of the current state.</li>
        <li>
          <tt>S'i</tt>: the <tt>i</tt>-th AES block of the next state.</li>
        <li>
          <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.</li>
        <li>
          <tt>C0</tt>: an AES block built from the following bytes in hexadecimal format: <tt>{ 0x00, 0x01, 0x01, 0x02, 0x03, 0x05, 0x08, 0x0d, 0x15, 0x22, 0x37, 0x59, 0x90, 0xe9, 0x79, 0x62 }</tt>.</li>
        <li>
          <tt>C1</tt>: an AES block built from the following bytes in hexadecimal format: <tt>{ 0xdb, 0x3d, 0x18, 0x55, 0x6d, 0xc2, 0x2f, 0xf1, 0x20, 0x11, 0x31, 0x42, 0x73, 0xb5, 0x28, 0xdd }</tt>.</li>
      </ul>
      <t>AES blocks are always 128 bits in length.</t>
      <t>Input and output values:</t>
      <ul spacing="normal">
        <li>
          <tt>key</tt>: the encryption key (128 bits for AEGIS-128L, 256 bits for AEGIS-256).</li>
        <li>
          <tt>nonce</tt>: the public nonce (128 bits for AEGIS-128L, 256 bits for AEGIS-256).</li>
        <li>
          <tt>ad</tt>: the associated data.</li>
        <li>
          <tt>msg</tt>: the plaintext.</li>
        <li>
          <tt>ct</tt>: the ciphertext.</li>
        <li>
          <tt>tag</tt>: the authentication tag (128 or 256 bits).</li>
      </ul>
    </section>
    <section anchor="the-aegis-128l-algorithm">
      <name>The AEGIS-128L Algorithm</name>
      <t>AEGIS-128L has a 1024-bit state, made of eight 128-bit blocks <tt>{S0, ...S7}</tt>.</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>
          <tt>K_LEN</tt> (key length) is 16 octets (128 bits).</li>
        <li>
          <tt>P_MAX</tt> (maximum length of the plaintext) is 2<sup>61</sup> octets (2<sup>64</sup> bits).</li>
        <li>
          <tt>A_MAX</tt> (maximum length of the associated data) is 2<sup>61</sup> octets (2<sup>64</sup> bits).</li>
        <li>
          <tt>N_MIN</tt> (minimum nonce length) = <tt>N_MAX</tt> (maximum nonce length) = 16 octets (128 bits).</li>
        <li>
          <tt>C_MAX</tt> (maximum ciphertext length) = <tt>P_MAX</tt> + tag length = 2<sup>61</sup> + 16 or 32 octets (2<sup>64</sup> + 128 or 256 bits).</li>
      </ul>
      <t>Distinct associated data inputs, as described in <xref section="3" sectionFormat="comma" target="RFC5116"/> shall 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 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>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.</li>
          <li>The key <bcp14>MUST</bcp14> be randomly chosen from a uniform distribution.</li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>msg</tt>: the message to be encrypted (length <bcp14>MUST</bcp14> be less than <tt>P_MAX</tt>).</li>
          <li>
            <tt>ad</tt>: the associated data to authenticate (length <bcp14>MUST</bcp14> be less than <tt>A_MAX</tt>).</li>
          <li>
            <tt>key</tt>: the encryption key.</li>
          <li>
            <tt>nonce</tt>: the public nonce.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ct</tt>: the ciphertext.</li>
          <li>
            <tt>tag</tt>: the authentication tag.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
Init(key, nonce)

ct = {}

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

msg_blocks = Split(ZeroPad(msg, 256), 256)
for xi in msg_blocks:
    ct = ct || Enc(xi)

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

return ct and 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 failed.</t>
        <t>Security:</t>
        <ul spacing="normal">
          <li>If tag verification fails, the decrypted message and wrong message authentication tag <bcp14>MUST NOT</bcp14> be given as output. The decrypted message <bcp14>MUST</bcp14> be overwritten with zeros.</li>
          <li>The comparison of the input <tt>tag</tt> with the <tt>expected_tag</tt> <bcp14>MUST</bcp14> be done in constant time.</li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ct</tt>: the ciphertext to be decrypted (length <bcp14>MUST</bcp14> be less than <tt>C_MAX</tt>).</li>
          <li>
            <tt>tag</tt>: the authentication tag.</li>
          <li>
            <tt>ad</tt>: the associated data to authenticate (length <bcp14>MUST</bcp14> be less than <tt>A_MAX</tt>).</li>
          <li>
            <tt>key</tt>: the encryption key.</li>
          <li>
            <tt>nonce</tt>: the public nonce.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>Either the decrypted message <tt>msg</tt> or an error indicating that the authentication tag is invalid for the given inputs.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
Init(key, nonce)

msg = {}

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

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

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
    return "verification failed" error
else:
    return msg
]]></artwork>
      </section>
      <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, ...S7}</tt> using the given <tt>key</tt> and <tt>nonce</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>key</tt>: the encryption key.</li>
          <li>
            <tt>nonce</tt>: the public nonce.</li>
        </ul>
        <t>Defines:</t>
        <ul spacing="normal">
          <li>
            <tt>{S0, ...S7}</tt>: the initial state.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
S0 = key ^ nonce
S1 = C1
S2 = C0
S3 = C1
S4 = key ^ nonce
S5 = key ^ C0
S6 = key ^ C1
S7 = key ^ C0

Repeat(10, Update(nonce, key))
]]></artwork>
      </section>
      <section anchor="the-update-function">
        <name>The Update Function</name>
        <artwork><![CDATA[
Update(M0, M1)
]]></artwork>
        <t>The <tt>Update</tt> function is the core of the AEGIS-128L algorithm.
It updates the state <tt>{S0, ...S7}</tt> using two 128-bit values.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>M0</tt>: the first 128-bit block to be absorbed.</li>
          <li>
            <tt>M1</tt>: the second 128-bit block to be absorbed.</li>
        </ul>
        <t>Modifies:</t>
        <ul spacing="normal">
          <li>
            <tt>{S0, ...S7}</tt>: the state.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
S'0 = AESRound(S7, S0 ^ M0)
S'1 = AESRound(S0, S1)
S'2 = AESRound(S1, S2)
S'3 = AESRound(S2, S3)
S'4 = AESRound(S3, S4 ^ M1)
S'5 = AESRound(S4, S5)
S'6 = AESRound(S5, S6)
S'7 = AESRound(S6, S7)

S0  = S'0
S1  = S'1
S2  = S'2
S3  = S'3
S4  = S'4
S5  = S'5
S6  = S'6
S7  = S'7
]]></artwork>
      </section>
      <section anchor="the-absorb-function">
        <name>The Absorb Function</name>
        <artwork><![CDATA[
Absorb(ai)
]]></artwork>
        <t>The <tt>Absorb</tt> function absorbs a 256-bit input block <tt>ai</tt> into the state <tt>{S0, ...S7}</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ai</tt>: the 256-bit input block.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
t0, t1 = Split(ai, 128)
Update(t0, t1)
]]></artwork>
      </section>
      <section anchor="the-enc-function">
        <name>The Enc Function</name>
        <artwork><![CDATA[
Enc(xi)
]]></artwork>
        <t>The <tt>Enc</tt> function encrypts a 256-bit input block <tt>xi</tt> using the state <tt>{S0, ...S7}</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>xi</tt>: the 256-bit input block.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ci</tt>: the 256-bit encrypted block.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
z0 = S6 ^ S1 ^ (S2 & S3)
z1 = S2 ^ S5 ^ (S6 & S7)

t0, t1 = Split(xi, 128)
out0 = t0 ^ z0
out1 = t1 ^ z1

Update(t0, t1)
ci = out0 || out1

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 256-bit input block <tt>ci</tt> using the state <tt>{S0, ...S7}</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ci</tt>: the 256-bit encrypted block.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>xi</tt>: the 256-bit decrypted block.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
z0 = S6 ^ S1 ^ (S2 & S3)
z1 = S2 ^ S5 ^ (S6 & S7)

t0, t1 = Split(ci, 128)
out0 = t0 ^ z0
out1 = t1 ^ z1

Update(out0, out1)
xi = out0 || out1

return xi
]]></artwork>
      </section>
      <section anchor="the-decpartial-function">
        <name>The DecPartial Function</name>
        <artwork><![CDATA[
DecPartial(cn)
]]></artwork>
        <t>The <tt>DecPartial</tt> function decrypts the last ciphertext bits <tt>cn</tt> using the state <tt>{S0, ...S7}</tt> when they do not fill an entire block.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>cn</tt>: the encrypted input.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>xn</tt>: the decryption of <tt>cn</tt>.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
z0 = S6 ^ S1 ^ (S2 & S3)
z1 = S2 ^ S5 ^ (S6 & S7)

t0, t1 = Split(ZeroPad(cn, 256), 128)
out0 = t0 ^ z0
out1 = t1 ^ z1

xn = Truncate(out0 || out1, |cn|)

v0, v1 = Split(ZeroPad(xn, 256), 128)
Update(v0, v1)

return xn
]]></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 computes a 128- or 256-bit tag that authenticates the message and associated data.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ad_len_bits</tt>: the length of the associated data in bits.</li>
          <li>
            <tt>msg_len_bits</tt>: the length of the message in bits.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>tag</tt>: the authentication tag.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
t = S2 ^ (LE64(ad_len_bits) || LE64(msg_len_bits))

Repeat(7, Update(t, t))

if tag_length == 16: # 128 bits
  tag = S0 ^ S1 ^ S2 ^ S3 ^ S4 ^ S5 ^ S6
else:                # 256 bits
  tag = (S0 ^ S1 ^ S2 ^ S3) || (S4 ^ S5 ^ S6 ^ S7)

return tag
]]></artwork>
      </section>
    </section>
    <section anchor="the-aegis-256-algorithm">
      <name>The AEGIS-256 Algorithm</name>
      <t>AEGIS-256 has a 768-bit state, made of six 128-bit blocks <tt>{S0, ...S5}</tt>.</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>
          <tt>K_LEN</tt> (key length) is 32 octets (256 bits).</li>
        <li>
          <tt>P_MAX</tt> (maximum length of the plaintext) is 2<sup>61</sup> octets (2<sup>64</sup> bits).</li>
        <li>
          <tt>A_MAX</tt> (maximum length of the associated data) is 2<sup>61</sup> octets (2<sup>64</sup> bits).</li>
        <li>
          <tt>N_MIN</tt> (minimum nonce length) = <tt>N_MAX</tt> (maximum nonce length) = 32 octets (256 bits).</li>
        <li>
          <tt>C_MAX</tt> (maximum ciphertext length) = <tt>P_MAX</tt> + tag length = 2<sup>61</sup> + 16 or 32 octets (2<sup>64</sup> + 128 or 256 bits).</li>
      </ul>
      <t>Distinct associated data inputs, as described in <xref section="3" sectionFormat="comma" target="RFC5116"/> shall 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 anchor="authenticated-encryption-1">
        <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>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.</li>
          <li>The key <bcp14>MUST</bcp14> be randomly chosen from a uniform distribution.</li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>msg</tt>: the message to be encrypted (length <bcp14>MUST</bcp14> be less than <tt>P_MAX</tt>).</li>
          <li>
            <tt>ad</tt>: the associated data to authenticate (length <bcp14>MUST</bcp14> be less than <tt>A_MAX</tt>).</li>
          <li>
            <tt>key</tt>: the encryption key.</li>
          <li>
            <tt>nonce</tt>: the public nonce.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ct</tt>: the ciphertext.</li>
          <li>
            <tt>tag</tt>: the authentication tag.</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 xi in msg_blocks:
    ct = ct || Enc(xi)

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

return ct and tag
]]></artwork>
      </section>
      <section anchor="authenticated-decryption-1">
        <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 failed.</t>
        <t>Security:</t>
        <ul spacing="normal">
          <li>If tag verification fails, the decrypted message and wrong message authentication tag <bcp14>MUST NOT</bcp14> be given as output. The decrypted message <bcp14>MUST</bcp14> be overwritten with zeros.</li>
          <li>The comparison of the input <tt>tag</tt> with the <tt>expected_tag</tt> <bcp14>MUST</bcp14> be done in constant time.</li>
        </ul>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ct</tt>: the ciphertext to be decrypted (length <bcp14>MUST</bcp14> be less than <tt>C_MAX</tt>).</li>
          <li>
            <tt>tag</tt>: the authentication tag.</li>
          <li>
            <tt>ad</tt>: the associated data to authenticate (length <bcp14>MUST</bcp14> be less than <tt>A_MAX</tt>).</li>
          <li>
            <tt>key</tt>: the encryption key.</li>
          <li>
            <tt>nonce</tt>: the public nonce.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>Either the decrypted message <tt>msg</tt> or an error indicating that the authentication tag is invalid for the given inputs.</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(ZeroPad(ct, 128), 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
    return "verification failed" error
else:
    return msg
]]></artwork>
      </section>
      <section anchor="the-init-function-1">
        <name>The Init Function</name>
        <artwork><![CDATA[
Init(key, nonce)
]]></artwork>
        <t>The <tt>Init</tt> function constructs the initial state <tt>{S0, ...S5}</tt> using the given <tt>key</tt> and <tt>nonce</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>key</tt>: the encryption key.</li>
          <li>
            <tt>nonce</tt>: the public nonce.</li>
        </ul>
        <t>Defines:</t>
        <ul spacing="normal">
          <li>
            <tt>{S0, ...S5}</tt>: the initial state.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
k0, k1 = Split(key, 128)
n0, n1 = Split(nonce, 128)

S0 = k0 ^ n0
S1 = k1 ^ n1
S2 = C1
S3 = C0
S4 = k0 ^ C0
S5 = k1 ^ C1

Repeat(4,
  Update(k0)
  Update(k1)
  Update(k0 ^ n0)
  Update(k1 ^ n1)
)
]]></artwork>
      </section>
      <section anchor="the-update-function-1">
        <name>The Update Function</name>
        <artwork><![CDATA[
Update(M)
]]></artwork>
        <t>The <tt>Update</tt> function is the core of the AEGIS-256 algorithm.
It updates the state <tt>{S0, ...S5}</tt> using a 128-bit value.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>msg</tt>: the block to be absorbed.</li>
        </ul>
        <t>Modifies:</t>
        <ul spacing="normal">
          <li>
            <tt>{S0, ...S5}</tt>: the state.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
S'0 = AESRound(S5, S0 ^ M)
S'1 = AESRound(S0, S1)
S'2 = AESRound(S1, S2)
S'3 = AESRound(S2, S3)
S'4 = AESRound(S3, S4)
S'5 = AESRound(S4, S5)

S0  = S'0
S1  = S'1
S2  = S'2
S3  = S'3
S4  = S'4
S5  = S'5
]]></artwork>
      </section>
      <section anchor="the-absorb-function-1">
        <name>The Absorb Function</name>
        <artwork><![CDATA[
Absorb(ai)
]]></artwork>
        <t>The <tt>Absorb</tt> function absorbs a 128-bit input block <tt>ai</tt> into the state <tt>{S0, ...S5}</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ai</tt>: the input block.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
Update(ai)
]]></artwork>
      </section>
      <section anchor="the-enc-function-1">
        <name>The Enc Function</name>
        <artwork><![CDATA[
Enc(xi)
]]></artwork>
        <t>The <tt>Enc</tt> function encrypts a 128-bit input block <tt>xi</tt> using the state <tt>{S0, ...S5}</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>xi</tt>: the input block.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ci</tt>: the encrypted input block.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
z = S1 ^ S4 ^ S5 ^ (S2 & S3)

Update(xi)

ci = xi ^ z

return ci
]]></artwork>
      </section>
      <section anchor="the-dec-function-1">
        <name>The Dec Function</name>
        <artwork><![CDATA[
Dec(ci)
]]></artwork>
        <t>The <tt>Dec</tt> function decrypts a 128-bit input block <tt>ci</tt> using the state <tt>{S0, ...S5}</tt>.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ci</tt>: the encrypted input block.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>xi</tt>: the decrypted block.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
z = S1 ^ S4 ^ S5 ^ (S2 & S3)

xi = ci ^ z

Update(xi)

return xi
]]></artwork>
      </section>
      <section anchor="the-decpartial-function-1">
        <name>The DecPartial Function</name>
        <artwork><![CDATA[
DecPartial(cn)
]]></artwork>
        <t>The <tt>DecPartial</tt> function decrypts the last ciphertext bits <tt>cn</tt> using the state <tt>{S0, ...S5}</tt> when they do not fill an entire block.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>cn</tt>: the encrypted input.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>xn</tt>: the decryption of <tt>cn</tt>.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
z = S1 ^ S4 ^ S5 ^ (S2 & S3)

t = ZeroPad(cn, 128)
out = t ^ z

xn = Truncate(out, |cn|)

v = ZeroPad(xn, 128)
Update(v)

return xn
]]></artwork>
      </section>
      <section anchor="the-finalize-function-1">
        <name>The Finalize Function</name>
        <artwork><![CDATA[
Finalize(ad_len_bits, msg_len_bits)
]]></artwork>
        <t>The <tt>Finalize</tt> function computes a 128- or 256-bit tag that authenticates the message and associated data.</t>
        <t>Inputs:</t>
        <ul spacing="normal">
          <li>
            <tt>ad_len_bits</tt>: the length of the associated data in bits.</li>
          <li>
            <tt>msg_len_bits</tt>: the length of the message in bits.</li>
        </ul>
        <t>Outputs:</t>
        <ul spacing="normal">
          <li>
            <tt>tag</tt>: the authentication tag.</li>
        </ul>
        <t>Steps:</t>
        <artwork><![CDATA[
t = S3 ^ (LE64(ad_len_bits) || LE64(msg_len_bits))

Repeat(7, Update(t))

if tag_length == 16: # 128 bits
  tag = S0 ^ S1 ^ S2 ^ S3 ^ S4 ^ S5
else:                # 256 bits
  tag = (S0 ^ S1 ^ S2) || (S3 ^ S4 ^ S5)

return tag
]]></artwork>
      </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="security-considerations">
      <name>Security Considerations</name>
      <t>AEGIS-256 offers 256-bit message security against plaintext and state recovery, whereas AEGIS-128L offers 128-bit security.</t>
      <t>An authentication tag may verify under multiple keys, nonces, or associated data. Assuming AEGIS is fully committing, finding different inputs producing the same tag is expected to require ~2<sup>64</sup> attempts with a 128-bit authentication tag and ~2<sup>128</sup> attempts with a 256-bit tag.</t>
      <t>Under the assumption that the secret key is unknown to the attacker and a 128-bit tag is used, both AEGIS-128L and AEGIS-256 target 128-bit security against forgery attacks. With a 256-bit tag, AEGIS-256 targets 256-bit security against forgery attacks, whereas AEGIS-128L continues to target 128-bit security.</t>
      <t>Both algorithms <bcp14>MUST</bcp14> be used in a nonce-respecting setting: for a given <tt>key</tt>, a <tt>nonce</tt> <bcp14>MUST</bcp14> only be used once. Failure to do so would immediately reveal the bitwise difference between two messages.</t>
      <t>If tag verification fails, the decrypted message and wrong message authentication tag <bcp14>MUST NOT</bcp14> be given as output. As shown in the analysis of the (robustness of CAESAR candidates beyond their guarantees)<xref target="CRA18"/>, even a partial leak of the plaintext without verification would facilitate chosen ciphertext attacks.</t>
      <t>Every key <bcp14>MUST</bcp14> be randomly chosen from a uniform distribution.</t>
      <t>The nonce <bcp14>MAY</bcp14> be public or predictable. It can be a counter, the output of a permutation, or a generator with a long period.</t>
      <t>With AEGIS-128L, random nonces can safely encrypt up to 2<sup>48</sup> messages using the same key with negligible (~ 2<sup>-33</sup>, to align with NIST guidelines) collision probability.</t>
      <t>With AEGIS-256, random nonces can be used with no practical limits.</t>
      <t>The security of AEGIS against timing and physical attacks is limited by the implementation of the underlying <tt>AESRound()</tt> function. Failure to implement <tt>AESRound()</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 also depend on the threat model in question.</t>
      <t>Security analyses of AEGIS can be found in Chapter 4 of <xref target="AEGIS"/>, in <xref target="Min14"/>, in <xref target="ENP19"/>, in <xref target="LIMS21"/>, in <xref target="JLD21"/>, and in <xref target="STSI23"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA has assigned the following identifiers in the AEAD Algorithms Registry:</t>
      <table>
        <name>AEGIS entries in the AEAD Algorithms Registry</name>
        <thead>
          <tr>
            <th align="left">Algorithm Name</th>
            <th align="left">ID</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>AEAD_AEGIS128L</tt></td>
            <td align="left">
              <tt>32</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>AEAD_AEGIS256</tt></td>
            <td align="left">
              <tt>33</tt></td>
          </tr>
        </tbody>
      </table>
      <t>IANA has also assigned the following TLS cipher suites in the TLS Cipher Suite Registry:</t>
      <table>
        <name>AEGIS entries in the TLS Cipher Suite Registry</name>
        <thead>
          <tr>
            <th align="left">Cipher Suite Name</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>TLS_AEGIS_256_SHA384</tt></td>
            <td align="left">
              <tt>{0x13,0x06}</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>TLS_AEGIS_128L_SHA256</tt></td>
            <td align="left">
              <tt>{0x13,0x07}</tt></td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to update the references of these entries to refer to the final version of this document.</t>
    </section>
    <section anchor="quic-and-dtls-13-header-protection">
      <name>QUIC and DTLS 1.3 Header Protection</name>
      <section anchor="dtls-13-record-number-encryption">
        <name>DTLS 1.3 Record Number Encryption</name>
        <t>In DTLS 1.3, record sequence numbers are encrypted as specified in [RFC9147].</t>
        <t>For AEGIS-128L and AEGIS-256, the mask is generated using the AEGIS <tt>Encrypt</tt> function with:</t>
        <ul spacing="normal">
          <li>a 128-bit tag length</li>
          <li>
            <tt>sn_key</tt>, as defined in Section 4.2.3 of [RFC9147]</li>
          <li>
            <tt>ciphertext[0..16]</tt>: the first 16 bytes of the DTLS ciphertext</li>
          <li>
            <tt>nonce_len</tt>: the AEGIS nonce length</li>
        </ul>
        <t>The mask is computed as follows:</t>
        <artwork><![CDATA[
mask = Encrypt("", "", sn_key, ZeroPad(ciphertext[0..16], nonce_len))
]]></artwork>
      </section>
      <section anchor="quic-header-protection">
        <name>QUIC Header Protection</name>
        <t>In QUIC, parts of the QUIC packet headers are encrypted as specified in [RFC9001].</t>
        <t>For AEGIS-128L and AEGIS-256, the mask is generated using the AEGIS <tt>Encrypt</tt> function with:</t>
        <ul spacing="normal">
          <li>a 128-bit tag length</li>
          <li>
            <tt>hp_key</tt>, as defined in Section 5.4 of [RFC9001]</li>
          <li>
            <tt>sample</tt>: the 16 bytes QUIC ciphertext sample</li>
          <li>
            <tt>nonce_len</tt>: the AEGIS nonce length</li>
        </ul>
        <t>The mask is computed as follows:</t>
        <artwork><![CDATA[
mask = Encrypt("", "", hp_key, ZeroPad(sample, nonce_len))
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="FIPS-AES" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf">
          <front>
            <title>Advanced encryption standard (AES)</title>
            <author>
              <organization abbrev="NIST">National Institute of Standards and Technology</organization>
              <address>
                <postal>
                  <country>US</country>
                  <city>Gaithersburg</city>
                </postal>
              </address>
            </author>
            <date month="November" year="2001"/>
          </front>
          <seriesInfo name="NIST Federal Information Processing Standards Publications" value="197"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.197"/>
        </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
        <name>Informative References</name>
        <reference anchor="AEGIS" target="https://competitions.cr.yp.to/round3/aegisv11.pdf">
          <front>
            <title>AEGIS: A fast encryption algorithm (v1.1)</title>
            <author initials="H." surname="Wu" fullname="Hongjun Wu">
              <organization>Nanyang Technological University</organization>
            </author>
            <author initials="B." surname="Preneel" fullname="Bart Preneel">
              <organization>KU Leuven</organization>
            </author>
            <date year="2016" month="September" day="15"/>
          </front>
        </reference>
        <reference anchor="JLD21">
          <front>
            <title>Guess-and-Determine Attacks on AEGIS</title>
            <author initials="L." surname="Jiao" fullname="Lin Jiao">
              <organization>State Key Laboratory of Cryptology, Beijing</organization>
            </author>
            <author initials="Y." surname="Li" fullname="Yongqiang Li">
              <organization>State Key Laboratory of Information Security, Institute of Information Engineering, Chinese Academy of Sciences; School of Cyber Security, University of Chinese Academy of Sciences</organization>
            </author>
            <author initials="S." surname="Du" fullname="Shaoyu Du">
              <organization>State Key Laboratory of Cryptology, Beijing</organization>
            </author>
            <date year="2021" month="May" day="22"/>
          </front>
          <seriesInfo name="DOI" value="10.1093/comjnl/bxab059"/>
          <refcontent>The Computer Journal</refcontent>
        </reference>
        <reference anchor="LIMS21" target="https://eprint.iacr.org/2021/187">
          <front>
            <title>Weak Keys in Reduced AEGIS and Tiaoxin</title>
            <author initials="F." surname="Liu" fullname="Fukang Liu">
              <organization>East China Normal University; University of Hyogo</organization>
            </author>
            <author initials="T." surname="Isobe" fullname="Takanori Isobe">
              <organization>University of Hyogo; National Institute of Information and Communications Technology; PRESTO, Japan Science and Technology Agency</organization>
            </author>
            <author initials="W." surname="Meier" fullname="Willi Meier">
              <organization>University of Applied Sciences and Arts Northwestern Switzerland</organization>
            </author>
            <author initials="K." surname="Sakamoto" fullname="Kosei Sakamoto">
              <organization>University of Hyogo</organization>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="DOI" value="10.46586/tosc.v2021.i2.104-139"/>
          <refcontent>IACR Transactions on Symmetric Cryptology, 2021(2), pp. 104–139</refcontent>
        </reference>
        <reference anchor="LGR21" target="https://www.usenix.org/conference/usenixsecurity21/presentation/len">
          <front>
            <title>Partitioning Oracle Attacks</title>
            <author initials="J." surname="Len" fullname="Julia Len">
              <organization>Cornell Tech</organization>
            </author>
            <author initials="P." surname="Grubbs" fullname="Paul Grubbs">
              <organization>Cornell Tech</organization>
            </author>
            <author initials="T." surname="Ristenpart" fullname="Thomas Ristenpart">
              <organization>Cornell Tech</organization>
            </author>
            <date year="2021"/>
          </front>
          <refcontent>30th USENIX Security Symposium (USENIX Security 21), pp. 195–212</refcontent>
        </reference>
        <reference anchor="ENP19">
          <front>
            <title>Analyzing the Linear Keystream Biases in AEGIS</title>
            <author initials="M." surname="Eichlseder" fullname="Maria Eichlseder">
              <organization>Graz University of Technology</organization>
            </author>
            <author initials="M." surname="Nageler" fullname="Marcel Nageler">
              <organization>Graz University of Technology</organization>
            </author>
            <author initials="R." surname="Primas" fullname="Robert Primas">
              <organization>Graz University of Technology</organization>
            </author>
            <date year="2020" month="January" day="31"/>
          </front>
          <seriesInfo name="DOI" value="10.13154/tosc.v2019.i4.348-368"/>
          <refcontent>IACR Transactions on Symmetric Cryptology, 2019(4), pp. 348–368</refcontent>
        </reference>
        <reference anchor="CRA18">
          <front>
            <title>Can Caesar Beat Galois? Robustness of CAESAR Candidates against Nonce Reusing and High Data Complexity Attacks</title>
            <author initials="S." surname="Vaudenay" fullname="Serge Vaudenay">
              <organization>École Polytechnique Fédérale de Lausanne EPFL</organization>
            </author>
            <author initials="D." surname="Vizár" fullname="Damian Vizár">
              <organization>École Polytechnique Fédérale de Lausanne EPFL</organization>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-319-93387-0_25"/>
          <refcontent>Applied Cryptography and Network Security. ACNS 2018. Lecture Notes in Computer Science, vol 10892, pp. 476–494</refcontent>
        </reference>
        <reference anchor="Min14" target="https://eprint.iacr.org/2018/292">
          <front>
            <title>Linear Biases in AEGIS Keystream</title>
            <author initials="B." surname="Minaud" fullname="Brice Minaud">
              <organization>Agence nationale de la sécurité des systèmes d'information ANSSI</organization>
            </author>
            <date year="2014"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-319-13051-4_18"/>
          <refcontent>Selected Areas in Cryptography. SAC 2014. Lecture Notes in Computer Science, vol 8781, pp. 290–305</refcontent>
        </reference>
        <reference anchor="STSI23" target="https://doi.org/10.1049/ise2.12109">
          <front>
            <title>MILP-based security evaluation for AEGIS/Tiaoxin-346/Rocca</title>
            <author initials="T." surname="Shiraya" fullname="Takuro Shiraya">
              <organization>University of Hyogo</organization>
            </author>
            <author initials="N." surname="Takeuchi" fullname="Nobuyuki Takeuchi">
              <organization>University of Hyogo</organization>
            </author>
            <author initials="K." surname="Sakamoto" fullname="Kosei Sakamoto">
              <organization>University of Hyogo</organization>
            </author>
            <author initials="T." surname="Isobe" fullname="Takanori Isobe">
              <organization>University of Hyogo; National Institute of Information and Communications Technology</organization>
            </author>
            <date year="2023" month="January" day="27"/>
          </front>
          <seriesInfo name="DOI" value="10.1049/ise2.12109"/>
          <refcontent>IET Information Security, 2023, pp. 1-10</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <section anchor="aesround-test-vector">
        <name>AESRound Test Vector</name>
        <artwork><![CDATA[
in   : 000102030405060708090a0b0c0d0e0f

rk   : 101112131415161718191a1b1c1d1e1f

out  : 7a7b4e5638782546a8c0477a3b813f43
]]></artwork>
      </section>
      <section anchor="aegis-128l-test-vectors">
        <name>AEGIS-128L Test Vectors</name>
        <section anchor="update-test-vector">
          <name>Update Test Vector</name>
          <artwork><![CDATA[
S0   : 9b7e60b24cc873ea894ecc07911049a3
S1   : 330be08f35300faa2ebf9a7b0d274658
S2   : 7bbd5bd2b049f7b9b515cf26fbe7756c
S3   : c35a00f55ea86c3886ec5e928f87db18
S4   : 9ebccafce87cab446396c4334592c91f
S5   : 58d83e31f256371e60fc6bb257114601
S6   : 1639b56ea322c88568a176585bc915de
S7   : 640818ffb57dc0fbc2e72ae93457e39a

M0   : 033e6975b94816879e42917650955aa0
M1   : 033e6975b94816879e42917650955aa0

After Update:
S0   : 596ab773e4433ca0127c73f60536769d
S1   : 790394041a3d26ab697bde865014652d
S2   : 38cf49e4b65248acd533041b64dd0611
S3   : 16d8e58748f437bfff1797f780337cee
S4   : 69761320f7dd738b281cc9f335ac2f5a
S5   : a21746bb193a569e331e1aa985d0d729
S6   : 09d714e6fcf9177a8ed1cde7e3d259a6
S7   : 61279ba73167f0ab76f0a11bf203bdff
]]></artwork>
        </section>
        <section anchor="test-vector-1">
          <name>Test Vector 1</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    :

msg   : 00000000000000000000000000000000

ct    : c1c0e58bd913006feba00f4b3cc3594e

tag128: abe0ece80c24868a226a35d16bdae37a

tag256: 25835bfbb21632176cf03840687cb968
        cace4617af1bd0f7d064c639a5c79ee4
]]></artwork>
        </section>
        <section anchor="test-vector-2">
          <name>Test Vector 2</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    :

msg   :

ct    :

tag128: c2b879a67def9d74e6c14f708bbcc9b4

tag256: 1360dc9db8ae42455f6e5b6a9d488ea4
        f2184c4e12120249335c4ee84bafe25d
]]></artwork>
        </section>
        <section anchor="test-vector-3">
          <name>Test Vector 3</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    : 0001020304050607

msg   : 000102030405060708090a0b0c0d0e0f
        101112131415161718191a1b1c1d1e1f

ct    : 79d94593d8c2119d7e8fd9b8fc77845c
        5c077a05b2528b6ac54b563aed8efe84

tag128: cc6f3372f6aa1bb82388d695c3962d9a

tag256: 022cb796fe7e0ae1197525ff67e30948
        4cfbab6528ddef89f17d74ef8ecd82b3
]]></artwork>
        </section>
        <section anchor="test-vector-4">
          <name>Test Vector 4</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    : 0001020304050607

msg   : 000102030405060708090a0b0c0d

ct    : 79d94593d8c2119d7e8fd9b8fc77

tag128: 5c04b3dba849b2701effbe32c7f0fab7

tag256: 86f1b80bfb463aba711d15405d094baf
        4a55a15dbfec81a76f35ed0b9c8b04ac
]]></artwork>
        </section>
        <section anchor="test-vector-5">
          <name>Test Vector 5</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    : 000102030405060708090a0b0c0d0e0f
        101112131415161718191a1b1c1d1e1f
        20212223242526272829

msg   : 101112131415161718191a1b1c1d1e1f
        202122232425262728292a2b2c2d2e2f
        3031323334353637

ct    : b31052ad1cca4e291abcf2df3502e6bd
        b1bfd6db36798be3607b1f94d34478aa
        7ede7f7a990fec10

tag128: 7542a745733014f9474417b337399507

tag256: b91e2947a33da8bee89b6794e647baf0
        fc835ff574aca3fc27c33be0db2aff98
]]></artwork>
        </section>
        <section anchor="test-vector-6">
          <name>Test Vector 6</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10000200000000000000000000000000

nonce : 10010000000000000000000000000000

ad    : 0001020304050607

ct    : 79d94593d8c2119d7e8fd9b8fc77

tag128: 5c04b3dba849b2701effbe32c7f0fab7

tag256: 86f1b80bfb463aba711d15405d094baf
        4a55a15dbfec81a76f35ed0b9c8b04ac
]]></artwork>
        </section>
        <section anchor="test-vector-7">
          <name>Test Vector 7</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    : 0001020304050607

ct    : 79d94593d8c2119d7e8fd9b8fc78

tag128: 5c04b3dba849b2701effbe32c7f0fab7

tag256: 86f1b80bfb463aba711d15405d094baf
        4a55a15dbfec81a76f35ed0b9c8b04ac
]]></artwork>
        </section>
        <section anchor="test-vector-8">
          <name>Test Vector 8</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    : 0001020304050608

ct    : 79d94593d8c2119d7e8fd9b8fc77

tag128: 5c04b3dba849b2701effbe32c7f0fab7

tag256: 86f1b80bfb463aba711d15405d094baf
        4a55a15dbfec81a76f35ed0b9c8b04ac
]]></artwork>
        </section>
        <section anchor="test-vector-9">
          <name>Test Vector 9</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000

nonce : 10000200000000000000000000000000

ad    : 0001020304050607

ct    : 79d94593d8c2119d7e8fd9b8fc77

tag128: 6c04b3dba849b2701effbe32c7f0fab8

tag256: 86f1b80bfb463aba711d15405d094baf
        4a55a15dbfec81a76f35ed0b9c8b04ad
]]></artwork>
        </section>
      </section>
      <section anchor="aegis-256-test-vectors">
        <name>AEGIS-256 Test Vectors</name>
        <section anchor="update-test-vector-1">
          <name>Update Test Vector</name>
          <artwork><![CDATA[
S0   : 1fa1207ed76c86f2c4bb40e8b395b43e
S1   : b44c375e6c1e1978db64bcd12e9e332f
S2   : 0dab84bfa9f0226432ff630f233d4e5b
S3   : d7ef65c9b93e8ee60c75161407b066e7
S4   : a760bb3da073fbd92bdc24734b1f56fb
S5   : a828a18d6a964497ac6e7e53c5f55c73

M    : b165617ed04ab738afb2612c6d18a1ec

After Update:
S0   : e6bc643bae82dfa3d991b1b323839dcd
S1   : 648578232ba0f2f0a3677f617dc052c3
S2   : ea788e0e572044a46059212dd007a789
S3   : 2f1498ae19b80da13fba698f088a8590
S4   : a54c2ee95e8c2a2c3dae2ec743ae6b86
S5   : a3240fceb68e32d5d114df1b5363ab67
]]></artwork>
        </section>
        <section anchor="test-vector-1-1">
          <name>Test Vector 1</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    :

msg   : 00000000000000000000000000000000

ct    : 754fc3d8c973246dcc6d741412a4b236

tag128: 3fe91994768b332ed7f570a19ec5896e

tag256: 1181a1d18091082bf0266f66297d167d
        2e68b845f61a3b0527d31fc7b7b89f13
]]></artwork>
        </section>
        <section anchor="test-vector-2-1">
          <name>Test Vector 2</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    :

msg   :

ct    :

tag128: e3def978a0f054afd1e761d7553afba3

tag256: 6a348c930adbd654896e1666aad67de9
        89ea75ebaa2b82fb588977b1ffec864a
]]></artwork>
        </section>
        <section anchor="test-vector-3-1">
          <name>Test Vector 3</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    : 0001020304050607

msg   : 000102030405060708090a0b0c0d0e0f
        101112131415161718191a1b1c1d1e1f

ct    : f373079ed84b2709faee373584585d60
        accd191db310ef5d8b11833df9dec711

tag128: 8d86f91ee606e9ff26a01b64ccbdd91d

tag256: b7d28d0c3c0ebd409fd22b4416050307
        3a547412da0854bfb9723020dab8da1a
]]></artwork>
        </section>
        <section anchor="test-vector-4-1">
          <name>Test Vector 4</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    : 0001020304050607

msg   : 000102030405060708090a0b0c0d

ct    : f373079ed84b2709faee37358458

tag128: c60b9c2d33ceb058f96e6dd03c215652

tag256: 8c1cc703c81281bee3f6d9966e14948b
        4a175b2efbdc31e61a98b4465235c2d9
]]></artwork>
        </section>
        <section anchor="test-vector-5-1">
          <name>Test Vector 5</name>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    : 000102030405060708090a0b0c0d0e0f
        101112131415161718191a1b1c1d1e1f
        20212223242526272829

msg   : 101112131415161718191a1b1c1d1e1f
        202122232425262728292a2b2c2d2e2f
        3031323334353637

ct    : 57754a7d09963e7c787583a2e7b859bb
        24fa1e04d49fd550b2511a358e3bca25
        2a9b1b8b30cc4a67

tag128: ab8a7d53fd0e98d727accca94925e128

tag256: a3aca270c006094d71c20e6910b5161c
        0826df233d08919a566ec2c05990f734
]]></artwork>
        </section>
        <section anchor="test-vector-6-1">
          <name>Test Vector 6</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10000200000000000000000000000000
        00000000000000000000000000000000

nonce : 10010000000000000000000000000000
        00000000000000000000000000000000

ad    : 0001020304050607

ct    : f373079ed84b2709faee37358458

tag128: c60b9c2d33ceb058f96e6dd03c215652

tag256: 8c1cc703c81281bee3f6d9966e14948b
        4a175b2efbdc31e61a98b4465235c2d9
]]></artwork>
        </section>
        <section anchor="test-vector-7-1">
          <name>Test Vector 7</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    : 0001020304050607

ct    : f373079ed84b2709faee37358459

tag128: c60b9c2d33ceb058f96e6dd03c215652

tag256: 8c1cc703c81281bee3f6d9966e14948b
        4a175b2efbdc31e61a98b4465235c2d9
]]></artwork>
        </section>
        <section anchor="test-vector-8-1">
          <name>Test Vector 8</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    : 0001020304050608

ct    : f373079ed84b2709faee37358458

tag128: c60b9c2d33ceb058f96e6dd03c215652

tag256: 8c1cc703c81281bee3f6d9966e14948b
        4a175b2efbdc31e61a98b4465235c2d9
]]></artwork>
        </section>
        <section anchor="test-vector-9-1">
          <name>Test Vector 9</name>
          <t>This test <bcp14>MUST</bcp14> return a “verification failed” error.</t>
          <artwork><![CDATA[
key   : 10010000000000000000000000000000
        00000000000000000000000000000000

nonce : 10000200000000000000000000000000
        00000000000000000000000000000000

ad    : 0001020304050607

ct    : f373079ed84b2709faee37358458

tag128: c60b9c2d33ceb058f96e6dd03c215653

tag256: 8c1cc703c81281bee3f6d9966e14948b
        4a175b2efbdc31e61a98b4465235c2da
]]></artwork>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The AEGIS authenticated encryption algorithm was invented by Hongjun Wu and Bart Preneel.</t>
      <t>The round function leverages the AES permutation invented by Joan Daemen and Vincent Rijmen. They also authored the Pelican MAC that partly motivated the design of the AEGIS MAC.</t>
      <t>We would like to thank Eric Lagergren and Daniel Bleichenbacher for catching a broken test vector and Daniel Bleichenbacher for many helpful suggestions.</t>
      <t>We would also like to thank John Preuß Mattsson for his review of the draft, and for suggesting how AEGIS should be used in the context of DTLS and QUIC.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
3AHaugGJd701BEZ/gp69+sTLoM5BgG+UOahRVTnWHjxvixx1fnV7icP7OUsc
w/R6n0b/tcRxK15+LXH8WuL4tcTxa4njZy5xkF+kvaMPUuJYg/driePXEsev
JY6fXcX8sksc76qjbpY4urizGUG7peDBfb8WPH6qgof3sxc8vLcpeFxi8GWf
YmAMMKcU6Cj6Dl2hUEykqiQUMhamqpBcUuhYtGUSS5dJTF0mMXVRxGtHYkQb
/bo7oJSOfy/N7cEXa/hFLTbq5hW3J+9QMHm/WglfF/DWpZKe7mJcKLnV+Xu3
Sof3LpUOr610/DMLHbfWOH5U1eKDVyg2vLJ+T4XCu71CcXtlQvNat60PUX3Y
uPW7qw839361ee+bqw5r2dXNCW+ilDVKOfXJ0xYP7AVzkQBO89+MV/+U8sBG
/NxdHriJn3vPvrk4cE9R4E4ccdY+0XgZIuzjzt17H0/u/k70Unw1zM23WXnK
wiuc38jB96n3wdyrYi3T/muS/WdMsjs/Nsn+gTLs75dc13n1AZyNKfWj9tXL
NpbfNp6tloilJpP94X1BJ/t/hoMolzfydPrl8E3xTcE5Kc6RdplIjslVatOI
S74BqU9vUgKruFDXLyidwXf+qBuBqKGLo/PFQqbEJ/Pr4Vvm/cY0IcHPMeXm
nw9yJoPTd/etHuCMearfpqqHBQV9o0wrBS2PdfcQtdc2dql4RonSZDq/x5cs
SL6Yb/BQjAbcmpQWIL00szHhuRDXKiVxven2kPYimB2ORNdk0Niv69Wiv0MA
Huj6RQl33Gex4aIKHb62wZTKZfLNJMbf13LnRMIFGQGVy+3Oe8tFA3o6Rt0y
f6CO+EqcVAfmgo6oVHgXdAOn4HhOolK+vLgs6AX2NmneJmJZa43uzVA3USF0
Zg699Z4FdZfeDQp2LIEQ+ALU1yvdcmPGOrie1e6Dt5GrEDSCnCt1N88tGwTe
PmXR628Za5MonM6m9IBip932Sge+MYQZZU+9cDoMNOlmJx01KkB8p0ALjUNH
hNn5fKUuL4Adr0vjZbmapyM5ruQLKdQL2e0b7/0FFt1r5/RcWHv/EGmKnz5X
t9/ehNAWVehi4DrvXvPdqjbd9Jr0N73G8rpUajOvjIuVqAQUh6y3v/+er5Ol
q94kr9m90c23jKzX/FgiyMsYHV7hNRMJ3VNESkhXC4Y6W/PjZHJE2ulHFBme
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
3k0AIH7qj0DQY2LTyf8HE0IEmqSUAAA=

-->

</rfc>
