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


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

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC5116 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5116.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY SELF "[RFCXXXX]">
]>


<rfc ipr="trust200902" docName="draft-nakano-rocca-s-05" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Encryption algorithm Rocca-S</title>

    <author initials="Y." surname="Nakano" fullname="Yuto Nakano">
      <organization>KDDI Research, Inc.</organization>
      <address>
        <postal>
          <street>2-1-15 Ohara, Fujimino-shi, Saitama</street>
          <code>356-8502</code>
          <country>Japan</country>
        </postal>
        <email>yt-nakano@kddi.com</email>
      </address>
    </author>
    <author initials="K." surname="Fukushima" fullname="Kazuhide Fukushima">
      <organization>KDDI Research, Inc.</organization>
      <address>
        <postal>
          <street>2-1-15 Ohara, Fujimino-shi, Saitama</street>
          <code>356-8502</code>
          <country>Japan</country>
        </postal>
        <email>ka-fukushima@kddi.com</email>
      </address>
    </author>
    <author initials="T." surname="Isobe" fullname="Takanori Isobe">
      <organization>University of Hyogo</organization>
      <address>
        <postal>
          <street>7-1-28 Minatojima Minamimachi, Chuo-ku, Kobe-shi, Hyogo</street>
          <code>650-0047</code>
          <country>Japan</country>
        </postal>
        <email>takanori.isobe@ai.u-hyogo.ac.jp</email>
      </address>
    </author>

    <date year="2024" month="January" day="24"/>

    <area>sec</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 223?>

<t>This document defines Rocca-S encryption scheme,
which is an Authenticated Encryption with Associated Data (AEAD),
using a 256-bit key and can be efficiently implemented utilizing the AES New Instruction set (AES-NI).</t>



    </abstract>



  </front>

  <middle>


<?line 230?>

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

<!-- Rocca-S is an AES-based authenticated-encryption with associated-data scheme. -->

<section anchor="background"><name>Background</name>

<!-- Background Description -->

<t>Countries such as the USA, China, and South Korea are adapting to the fifth-generation mobile
communication systems (5G) technology at an increasingly rapid pace. There are more
than 1500 cities worldwide with access to 5G technology. Other countries are also taking significant
steps to make 5G networks commercially available to their citizens. As the research in
5G technology is moving toward global standardization, it is important for the research
community to focus on developing solutions beyond 5G and for the 6G era. The first
white paper on 6G <xref target="WP-6G"/> was published by 6G Flagship, University of Oulu, Finland
under the 6Genesis project in 2019. 
This white paper identified the key drivers, research
requirements, challenges, and essential research questions related to 6G. 
One of the main requirements as listed in this paper was to look at the problem
of transmitting data at a speed of over 100 Gbps per user.</t>

<t>Additionally, 3GPP requires that the cryptographic algorithms
proposed for 5G systems should support 256-bit keys <xref target="SPEC-5G"/>. Apart from the need of
speeds of more than 100 Gbps and supporting 256-bit keys, 3GPP also discusses the
possible impacts of quantum computing in the coming years, especially due to Grover&#39;s
algorithm. While describing the impact of quantum computers on symmetric algorithms
required for 5G and beyond, 3GPP states the following in Section 5.3 of <xref target="SPEC-5G"/>:</t>

<t>&quot;The threat to symmetric cryptography from quantum computing is lower
than that for asymmetric cryptography. As such there is little benefit in
transitioning symmetric algorithms without corresponding changes to the
asymmetric algorithms that accompany them.&quot;</t>

<t>However, it has been shown in numerous articles that quantum computers can
be used to either efficiently break or drastically reduce the time necessary 
to attack some symmetric-key cryptography methods. 
These results require a serious reevaluation of the premise that has 
informed beyond 5G quantum security concerns up to this point. 
Additionally, since NIST will finally standardize quantum-resistant public key algorithms
in the coming few years, we believe it is important for the research community 
to also focus on symmetric algorithms for future telecommunications that would provide security 
against quantum adversaries. 
The effectiveness of post-quantum asymmetric cryptography would only be 
improved if the symmetric cryptography used with it is also quantum resistant.
Thus, a symmetric cryptographic algorithm that</t>

<t><list style="symbols">
  <t>supports 256-bit key and provides 256-bit security with respect to key recovery and forgery attacks,</t>
  <t>has an encryption/decryption speed of more than 100 Gbps, and</t>
  <t>is at least as secure as AES-256 against quantum adversaries (for 128-bit security against a quantum adversary)</t>
</list></t>

<t>is needed.</t>

<t>Rocca-S has been designed as an encryption algorithm for a high speed communication such as future internet and beyond 5G mobile communications.
Rocca-S achieves an encryption/decryption speed of more than 200 Gbps in both the raw encryption scheme and the AEAD scheme on an Intel(R) Core(TM) i9-12900K.
It can provide 256-bit and 128-bit security against key recovery attacks in classical and quantum adversaries respectively.
The high throughput of Rocca-S can be achieved by utilizing the AES-NI <xref target="AES-NI"/>.
A similar approach has been taken by the AEGIS family <xref target="AEGIS"/> and Tiaoxin-346 <xref target="TIAOXIN"/>, both two submissions to the CAESAR competition <xref target="CAESAR"/>.
SNOW-V <xref target="SNOW-V"/> also uses the AES round function as a component so AES-NI can be used.</t>

</section>
<section anchor="design-concept"><name>Design Concept</name>

<t>In this document, we present an AES-based AEAD encryption scheme
with a 256-bit key and 256-bit tag called Rocca-S.</t>

<t>To achieve such a dramatically fast encryption/decryption speed,
Rocca-S adopts the design principle such as the SIMD-friendly round function and an efficient permutation-based structure.
We explore the class of AES-based structures to further increase its speed and reduce the state size.
Specifically, we take the following different approaches:</t>

<t><list style="symbols">
  <t>To minimize the critical path of the round function, we focus on the structure where
each 128-bit block of the internal state is updated by either one AES round (<spanx style="verb">aesenc</spanx>) or XOR
while Jean and Nikolic consider the case of applying both <spanx style="verb">aesenc</spanx> and XOR
in a cascade way for one round.</t>
  <t>We introduce a permutation between the 128-bit state words of the internal state
in order to increase the number of possible candidates while maintaining efficiency because 
executing such a permutation is a cost-free operation in the target software, which
was not taken into account in <xref target="DESIGN"/>.</t>
</list></t>

</section>
<section anchor="conventions-used-in-this-document"><name>Conventions Used in This Document</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; 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>

</section>
</section>
<section anchor="algorithm-description"><name>Algorithm Description</name>

<t>In this section, the notations and the specification of our designs will be described.</t>

<section anchor="notations"><name>Notations</name>

<!-- Notations Description -->

<t>The following notations will be used in the document.
Throughout this document,
a block means a 2-octet value.
For the constants Z0 and Z1,
we utilize the same ones as Tiaoxin-346 <xref target="TIAOXIN"/>.</t>

<t><list style="numbers">
  <t><spanx style="verb">X ^ Y</spanx>: The bitwise Exclusive OR (XOR) of <spanx style="verb">X</spanx> and <spanx style="verb">Y</spanx>.</t>
  <t><spanx style="verb">X#Y</spanx>: For a number <spanx style="verb">X</spanx> and a positive integer <spanx style="verb">Y</spanx>, the <spanx style="verb">Y</spanx>-th power of <spanx style="verb">X</spanx>.</t>
  <t><spanx style="verb">f#(N)</spanx>: For a function <spanx style="verb">f</spanx> and a non-negative integer <spanx style="verb">N</spanx>,
the <spanx style="verb">N</spanx>-th iteration of function <spanx style="verb">f</spanx>.</t>
  <t><spanx style="verb">|X|</spanx>: The length of <spanx style="verb">X</spanx> in bits.</t>
  <t><spanx style="verb">X||Y</spanx> : The concatenation of <spanx style="verb">X</spanx> and <spanx style="verb">Y</spanx>.</t>
  <t><spanx style="verb">ZERO(l)</spanx>: A zero string of length <spanx style="verb">l</spanx> bits.</t>
  <t><spanx style="verb">PAD(X)</spanx>: <spanx style="verb">X||ZERO(l)</spanx>, where <spanx style="verb">l</spanx> is the minimal non-negative integer such that
<spanx style="verb">|PAD(X)|</spanx> is a multiple of 256.</t>
  <t><spanx style="verb">PADN(X)</spanx>: <spanx style="verb">X||ZERO(l)</spanx>, where <spanx style="verb">l</spanx> is the minimal non-negative integer such that
<spanx style="verb">|PADN(X)|</spanx> is a multiple of 128.</t>
  <t><spanx style="verb">LE128(X)</spanx>: the little-endian encoding of 128-bit integer X.</t>
  <t>Write <spanx style="verb">X</spanx> as <spanx style="verb">X = X[0]||X[1]|| ... ||X[n] with |X[i]| = 256</spanx>,
   where <spanx style="verb">n</spanx> is <spanx style="verb">|X|/256 - 1</spanx>.
   In addition, <spanx style="verb">X[i]</spanx> is written as <spanx style="verb">X[i] = X[i]_0||X[i]_1</spanx> where <spanx style="verb">X[i]_0</spanx> and <spanx style="verb">X[i]_1</spanx> are 128-bit.</t>
  <t><spanx style="verb">S</spanx>: The state of Rocca-S, which is composed of 7 blocks, i.e.,
   <spanx style="verb">S = (S[0], S[1], ..., S[6])</spanx>,
   where <spanx style="verb">S[i]</spanx> (0 &lt;= i &lt;= 6) are blocks and <spanx style="verb">S[0]</spanx> is the first block.</t>
  <t><spanx style="verb">Z0</spanx>: A 128-bit constant block defined as <spanx style="verb">Z0 = 428a2f98d728ae227137449123ef65cd</spanx>.</t>
  <t><spanx style="verb">Z1</spanx>: A 128-bit constant block defined as <spanx style="verb">Z1 = b5c0fbcfec4d3b2fe9b5dba58189dbbc</spanx>.</t>
  <t><spanx style="verb">A(X)</spanx>: The AES round function without the constant addition operation, as defined
   below:<br />
   <spanx style="verb">A(X) = MixColumns( ShiftRows( SubBytes(X) ) )</spanx>,
   where <spanx style="verb">MixColumns</spanx>, <spanx style="verb">ShiftRows</spanx> and <spanx style="verb">SubBytes</spanx> are the same operations as defined
   in AES <xref target="AES"/>.</t>
  <t><spanx style="verb">AES(X,Y)</spanx>: One AES round is applied to the block <spanx style="verb">X</spanx>, where the round constant is <spanx style="verb">Y</spanx>,
   as defined below:<br />
   <spanx style="verb">AES(X,Y) = A(X) ^ Y</spanx>.<br />
   This operation is the same as <spanx style="verb">aesenc</spanx>, which is one of the instructions of AES-NI and
   performs one regular (not the last) round of AES on an input state <spanx style="verb">X</spanx> with a subkey <spanx style="verb">Y</spanx>.</t>
  <t><spanx style="verb">R(S,X0,X1)</spanx>: The round function is used to update the state S, as defined in <xref target="round-function"/>.</t>
</list></t>

</section>
<section anchor="round-function"><name>The Round Function</name>

<!-- The Round Update Function Description -->

<t>The input of the round function <spanx style="verb">R(S,X0,X1)</spanx> of Rocca-S consists of the state S and two
blocks <spanx style="verb">(X0,X1)</spanx>.
If denoting the output by <spanx style="verb">Snew</spanx>, <spanx style="verb">Snew:=R(S,X0,X1)</spanx> can be defined as follows:</t>

<figure><artwork><![CDATA[
Snew[0] = S[6] ^ S[1],
Snew[1] = AES(S[0],X_0),
Snew[2] = AES(S[1],S[0]),
Snew[3] = AES(S[2],S[6]),
Snew[4] = AES(S[3],X_1),
Snew[5] = AES(S[4],S[3]),
Snew[6] = AES(S[5],S[4]).
]]></artwork></figure>

<t>The corresponding illustration can be found in <xref target="fig-round-function"/>.</t>

<figure title="Illustration of the Round Function" anchor="fig-round-function"><artwork><![CDATA[
+----+      +----+  +----+  +----+ +----+      +----+  +----+
|S[0]|      |S[1]|  |S[6]|  |S[2]| |S[3]|      |S[4]|  |S[5]|
+-+-++      ++-+-+  ++-+-+  ++---+ +-+-++      ++-+-+  ++---+
  | |        | |     | |     |       | |        | |     | 
  | +-----+  | +--+  | +--+  |       | +-----+  | +--+  |
  v       |  v    |  v    |  v       v       |  v    |  v
+---+     | +---+ | +---+ | +---+  +---+     | +---+ | +---+ 
|AES|<-X0 +>|AES| +>|XOR| +>|AES|  |AES|<-X1 +>|AES| +>|AES|
+-+-+       +-+-+   +-+-+   +-+-+  +-+-+       +-+-+   +-+-+ 
  |           |       |       |      |           |       |
  v           v       v       v      v           v       v
+----+     +----+   +----+  +----+ +----+     +----+  +----+
|Snew|     |Snew|   |Snew|  |Snew| |Snew|     |Snew|  |Snew|
| [1]|     | [2]|   | [0]|  | [3]| | [4]|     | [5]|  | [6]|
+----+     +----+   +----+  +----+ +----+     +----+  +----+
]]></artwork></figure>

</section>
<section anchor="specification"><name>Specification</name>

<!-- Specification Description -->

<t>Rocca-S is an AEAD scheme composed of four phases:
initialization, processing the associated data, encryption, and finalization.
The input consists of a 256-bit key <spanx style="verb">K = K0||K1</spanx>,
a nonce <spanx style="verb">N</spanx> of between 12 and 16 octets (both inclusive) in length,
the associated data <spanx style="verb">AD</spanx>, and the message <spanx style="verb">M</spanx>.
The output is the corresponding ciphertext <spanx style="verb">C</spanx> and a 256-bit tag <spanx style="verb">T</spanx>.</t>

<t>The settings described below are required for the parameters:</t>

<t><list style="symbols">
  <t>The key <spanx style="verb">K</spanx> MUST be unpredictable for each invocation.</t>
  <t><spanx style="verb">PADN(N)</spanx>, where <spanx style="verb">N</spanx> is the nonce, MUST be unique per invocation with the same key,
so <spanx style="verb">N</spanx> MUST NOT be randomly generated.</t>
</list></t>

<section anchor="initialization"><name>Initialization</name>

<!-- Initialization Description -->

<t>First, <spanx style="verb">(N,K0,K1)</spanx> is loaded into the state <spanx style="verb">S</spanx> in the following way:</t>

<figure><artwork><![CDATA[
  S[0] = K1,
  S[1] = PADN(N),
  S[2] = Z0,
  S[3] = K0,
  S[4] = Z1,
  S[5] = PADN(N) ^ K1,
  S[6] = ZERO(128)
]]></artwork></figure>

<t>Then, 16 iterations of the round function <spanx style="verb">R(S,Z0,Z1)</spanx>,
which is written as <spanx style="verb">R(S,Z0,Z1)#(16)</spanx>,
are applied to state <spanx style="verb">S</spanx>.</t>

<t>After 16 iterations of the round function, two 128-bit keys are XORed with the state S in the following way:</t>

<figure><artwork><![CDATA[
S[0] = S[0] ^ K0, 
S[1] = S[1] ^ K0,
S[2] = S[2] ^ K1,
S[3] = S[3] ^ K0,
S[4] = S[4] ^ K0, 
S[5] = S[5] ^ K1,
S[6] = S[6] ^ K1.
]]></artwork></figure>

</section>
<section anchor="processing-the-associated-data"><name>Processing the Associated Data</name>

<!-- Processing The Associated Data Description -->

<t>If <spanx style="verb">AD</spanx> is empty, this phase will be skipped. Otherwise,
AD is padded to <spanx style="verb">PAD(AD)</spanx>, and the state is updated as follows:</t>

<figure><artwork><![CDATA[
   for i = 0 to d - 1
      R(S, PAD(AD)[i]_0, PAD(AD)[i]_1),
   end for
]]></artwork></figure>

<t>where <spanx style="verb">d = |PAD(AD)| / 256</spanx>.</t>

</section>
<section anchor="encryption"><name>Encryption</name>

<!-- Encryption Description -->
<t>The encryption phase is similar to the phase to process the associated data.
If <spanx style="verb">M</spanx> is empty, the encryption phase will be skipped.
Otherwise, <spanx style="verb">M</spanx> is first padded to <spanx style="verb">PAD(M)</spanx>, and then <spanx style="verb">PAD(M)</spanx> will be absorbed
with the round function.
During this procedure, the ciphertext <spanx style="verb">C</spanx> is generated.
If the last block of <spanx style="verb">M</spanx> is incomplete and its length is <spanx style="verb">b</spanx> bits, i.e.,
<spanx style="verb">0 &lt; b &lt; 256</spanx>, the last block of <spanx style="verb">C</spanx> will be truncated to the first <spanx style="verb">b</spanx> bits.
A detailed description is shown below:</t>

<figure><artwork><![CDATA[
   for i = 0 to m - 1
      C[i]_0 = AES(S[3] ^ S[5], S[0]) ^ PAD(M)[i]_0,
      C[i]_1 = AES(S[4] ^ S[6], S[2]) ^ PAD(M)[i]_1,
      R(S, PAD(M)[i]_0, PAD(M)[i]_1),
   end for
]]></artwork></figure>

<t>where <spanx style="verb">m = |PAD(M)| / 256</spanx>.</t>

</section>
<section anchor="finalization"><name>Finalization</name>

<t>The state <spanx style="verb">S</spanx> will again pass through 16 iterations
of the round function <spanx style="verb">R(S,LE128(|AD|),LE128(|M|))</spanx> and then the 256-bit tag <spanx style="verb">T</spanx> is computed in the
following way:</t>

<figure><artwork><![CDATA[
   T = (S[0] ^ S[1] ^ S[2] ^ S[3]) || (S[4] ^ S[5] ^ S[6])
]]></artwork></figure>

</section>
<section anchor="Rocca-S-Algorithm"><name>Rocca-S Algorithm</name>

<t>A formal description of Rocca-S can be seen in <xref target="fig-rocca-s-pseudo-code"/>, and
the corresponding illustration is shown in <xref target="fig-rocca-s-procedure"/>.</t>

<figure title="The Specification of Rocca-S" anchor="fig-rocca-s-pseudo-code"><artwork><![CDATA[
// Rocca-S Algorithm. The specification of Rocca-S
   procedure RoccaEncrypt(K0, K1, N, AD, M)
      S = Initialization(N,K0,K1)
      if |AD| > 0 then
         S = ProcessAD(S,PAD(AD))
      if |M| > 0 then
         S =  Encryption(S,PAD(M),C)
         Truncate C
      T = Finalization(S, |AD|, |M|)
      return (C, T)

   procedure RoccaDecrypt(K0, K1, N, AD, C, T)
      S = Initialization(N,K0,K1)
      if |AD| > 0 then
      S = ProcessAD(S,PAD(AD))
      if |C| > 0 then
         S = Decryption(S,PAD(C),M)
         Truncate M
      if T == Finalization(S, |AD|, |C|) then
         return M
      else
         return nil

   procedure Initialization(N, K0, K1)
      S[0] = K1,
      S[1] = PADN(N),
      S[2] = Z0,
      S[3] = K0,
      S[4] = Z1,
      S[5] = PADN(N) ^ K1,
      S[6] = ZERO(128)
      for i = 0 to 15 do
         S = R(S, Z0, Z1)
      S[0] = S[0] ^ K0, 
      S[1] = S[1] ^ K0,
      S[2] = S[2] ^ K1,
      S[3] = S[3] ^ K0,
      S[4] = S[4] ^ K0,
      S[5] = S[5] ^ K1,
      S[6] = S[6] ^ K1
      return S

   procedure ProcessAD(S, AD)
      d = |PAD(AD)|/256
      for i = 0 to d - 1 do
         S =  R(S, AD[i]_0, AD[i]_1)
      return S

   procedure Encryption(S, M, C)
      m = |PAD(M)|/256
      for i = 0 to m - 1 do
         C[i]_0 = AES(S[3] ^ S[5], S[0]) ^ M[i]_0
         C[i]_1 = AES(S[4] ^ S[6], S[2]) ^ M[i]_1
         S = R(S,M[i]_0, M[i]_1)
      return S

   procedure Decryption(S, M, C)
      c = |C|/256
      for i = 0 to c - 1 do
         M[i]_0 = AES(S[3] ^ S[5], S[0]) ^ C[i]_0
         M[i]_1 = AES(S[4] ^ S[6], S[2]) ^ C[i]_1
         S = R(S,M[i]_0, M[i]_1)
      return S

   procedure Finalization(S, |AD|, |M|)
      for i = 0 to 15 do
         S = R(S, |AD|, |M|)
      T0 = S[0] ^ S[1] ^ S[2] ^ S[3]
      T1 = S[4] ^ S[5] ^ S[6]
      return T0||T1      
]]></artwork></figure>

<figure title="The Procedure of Rocca-S" anchor="fig-rocca-s-procedure"><artwork><![CDATA[
            Z1         AD[0]_1  AD[1]_1
            |             |       |
            v             v       v
         +------+       +---+   +---+
PADN(N)->|      |       |   |   |   |
         |R#(16)+------>| R +-->| R +->...---+
 K0||K1->|      |   ^   |   |   |   |        |
         +------+   |   +---+   +---+        |
            ^     K0||K1  ^       ^          |
            |             |       |          |
            Z0         AD[0]_0  AD[1]_0      |
                                             |
+--------------------------------------------+
|
|             C[0]_1        C[1]_1        C[m-1]_1
|               ^             ^              ^
|               |             |              |                  |AD|
|             +-+-+         +-+-+          +-+-+                 |
|   AD[d-1]_1 |XOR|<-M[0]_1 |XOR|<-M[1]_1  |XOR|<-M[m-1]_1       |
|        |    +---+   |     +---+   |      +---+   |             |
|        v      ^     v       ^     v        ^     v             |
|       +---+   |   +---+     |   +---+      |   +---+           v
|       |   +---+   |   +-----+   |   |     -+   |   |       +------+
|       |   |       |   |         |   |          |   |       |      |
+------>| R +------>| R +-------->| R +->...---->| R +------>|R#(16)+->T
        |   |       |   |         |   |          |   |       |      |
        |   +---+   |   +-----+   |   |     -+   |   |       +------+
        +---+   |   +---+     |   +---+      |   +---+           ^
         ^      v     ^       v     ^        v     ^             |
         |    +---+   |     +---+   |      +---+   |             |
              |XOR|<-M[0]_0 |XOR|<-M[1]_0  |XOR|<-M[m-1]_0      |M|
    AD[d-1]_0 +-+-+         +-+-+          +-+-+
                |             |              |
                v             v              v
              C[0]_0        C[1]_0        C[m-1]_0
]]></artwork></figure>

</section>
<section anchor="a-raw-encryption-scheme"><name>A Raw Encryption Scheme</name>

<t>If the phases of processing the associated data and finalization are removed, 
a raw encryption scheme is obtained.</t>

</section>
<section anchor="a-keystream-generation-scheme"><name>A Keystream Generation Scheme</name>

<t>If the phases of processing the associated data and finalization are removed, and there is no message injection into the round function such that <spanx style="verb">R(S,0,0)</spanx>, 
a keystream generation scheme is obtained.
This scheme can be used as a general stream cipher and for random bit generation.</t>

</section>
<section anchor="support-for-shorter-key-length"><name>Support for Shorter Key Length</name>

<t>For Rocca-S to support 128-bit or 192-bit keys, the given key needs to be expanded to 256 bits.
When a 128-bit key is given, it will be set to <spanx style="verb">K0</spanx>, and <spanx style="verb">K1</spanx> is defined as <spanx style="verb">K1 = ZERO(128)</spanx>.
When a 192-bit key is given, the first 128-bit will be set to <spanx style="verb">K0</spanx>, and the remaining 64-bit will be set to <spanx style="verb">K1_p</spanx>.
Then <spanx style="verb">K1</spanx> is defined as <spanx style="verb">K1 = K1_p||ZERO(64)</spanx>.</t>

<t>The use of Key Derivation Functions (KDF) <xref target="KDF"/> to stretch the key length to 256-bit could be another option.
The given 128-bit or 192-bit key will be used as a key derivation key, and the output of the KDF will be 256-bit.</t>

</section>
<section anchor="settings-as-aead-algorithm-specifications"><name>Settings as AEAD Algorithm Specifications</name>

<t>To comply with the requirements defined in Section 4 of <xref target="RFC5116"/>,
the settings of the parameters for Rocca-S are defined as follows:</t>

<t><list style="symbols">
  <t><spanx style="verb">K_LEN</spanx> (key length) is 32 octets (256 bits), and <spanx style="verb">K</spanx> (key) does not require any particular data format.</t>
  <t><spanx style="verb">P_MAX</spanx> (maximum size of the plaintext) is 2#125 octets.</t>
  <t><spanx style="verb">A_MAX</spanx> (maximum size of the associated data) is 2#61 octets.</t>
  <t><spanx style="verb">N_MIN</spanx> (minimum size of the nonce) = 12 octets,
and <spanx style="verb">N_MAX</spanx> (maximum size of the nonce) = 16 octets.</t>
  <t><spanx style="verb">C_MAX</spanx> (the largest possible AEAD ciphertext) = P_MAX + tag length = 2#125 + 32 octets.</t>
</list></t>

<t>In addition,</t>

<t><list style="symbols">
  <t>Rocca-S does not structure its ciphertext output with the 
 authentication tag.</t>
  <t>Rocca-S is not randomized or is not stateful in the meanings of 
 the section 4 of <xref target="RFC5116"/>.</t>
</list></t>

</section>
</section>
<section anchor="security-claims"><name>Security Claims</name>

<section anchor="classic-setting"><name>Classic Setting</name>

<t>As described in <xref target="security-considerations"/>, Rocca-S provides 256-bit security against key-recovery and 192-bit security against forgery attacks
in the nonce-respecting setting.
We do not claim its security in the related-key and known-key settings.</t>

<t>The message length for a fixed key is limited to at most 2#128, and we also limit the number of different messages that are produced for a fixed key to be at most 2#128.
The length of the associated data for a fixed key is up to 2#64.</t>

</section>
<section anchor="quantum-setting"><name>Quantum Setting</name>

<t>Rocca-S provides 128-bit security against key-recovery and forgery attacks against quantum adversary with classical online queries.
Rocca-S does not claim security against online quantum superposition attacks.</t>

<!--
There exist no quantum attacks for key-recovery and forgery (in the nonce-respecting setting) on Rocca-S
with time complexity lower than 2#128.
Rocca-S does not provide security against related-key and known-key superposition attacks (as is the case of all known block ciphers).
-->

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

<section anchor="security-against-attacks"><name>Security Against Attacks</name>

<t>Rocca-S is secure against the following attacks:</t>

<t><list style="numbers">
  <t>Key-Recovery Attack: 256-bit security against key-recovery attacks.</t>
  <t>Differential Attack: Secure against differential attacks in the initialization phase.</t>
  <t>Forgery Attack: 192-bit security against forgery attacks.</t>
  <t>Integral Attack: Secure against integral attacks.</t>
  <t>State-recovery Attack:  <list style="symbols">
      <t>Guess-and-Determine Attack: The time complexity of
 the guess-and-determine attack cannot be lower than 2#256.</t>
      <t>Algebraic Attack: The system of equations, which needs to be solved in algebraic attacks to Rocca-S,
 cannot be solved with time complexity 2#256.</t>
    </list></t>
  <t>The Linear Bias: Secure against a statistical attack.</t>
</list></t>

<t>The details can be found in the paper <xref target="ROCCA-S"/>.</t>

</section>
<section anchor="other-attacks"><name>Other Attacks</name>

<t>While there are many attack vectors for block ciphers, their application to Rocca-S is
restrictive, as the attackers can only know partial information about the internal state from
the ciphertext blocks. In other words, reversing the round function is impossible in
Rocca-S without guessing many secret state blocks. Therefore, only the above potential
attack vectors are taken into account. In addition, due to the usage of the constant
(Z0,Z1) at the initialization phase, the attack based on the similarity in the four columns
of the AES state is also excluded.</t>

</section>
<section anchor="nonce-reuse"><name>Nonce Reuse</name>

<t>Inadvertent reuse of the same nonce by two invocations of the Rocca-S
encryption operation, with the same key, undermines the security of
the messages processed with those invocations.
A loss of confidentiality ensues because an adversary will be able to
reconstruct the bitwise exclusive-or of the two plaintext values.</t>

</section>
<section anchor="tag-verificatoin-failure"><name>Tag Verificatoin Failure</name>

<t>When the tag verification fails during the decryption phase, it is reccomended to erase the plaintext and computed tag.</t>

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

<t>IANA has assigned value TBD in the AEAD Algorithms registry to AEAD_ROCCA.</t>

</section>


  </middle>

  <back>


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

&RFC2119;
&RFC5116;
&RFC8174;


    </references>

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

<reference anchor="KDF" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-108.pdf">
  <front>
    <title>Recommendation for Key Derivation Using Pseudorandom Functions (Revised)</title>
    <author initials="L." surname="Chena" fullname="Lily Chena">
      <organization></organization>
    </author>
    <date year="2009"/>
  </front>
<refcontent>NIST Special Publication 800-108</refcontent></reference>
<reference anchor="ROCCA-S" target="https://doi.org/10.1007/978-3-031-50594-2_12">
  <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></organization>
    </author>
    <author initials="S." surname="Banik" fullname="Subhadeep Banik">
      <organization></organization>
    </author>
    <author initials="A." surname="Caforio" fullname="Andrea Caforio">
      <organization></organization>
    </author>
    <author initials="K." surname="Fukushima" fullname="Kazuhide Fukushima">
      <organization></organization>
    </author>
    <author initials="T." surname="Isobe" fullname="Takanori Isobe">
      <organization></organization>
    </author>
    <author initials="S." surname="Kiyomoto" fullname="Shisaku Kiyomoto">
      <organization></organization>
    </author>
    <author initials="F." surname="Liu" fullname="Fukang Liu">
      <organization></organization>
    </author>
    <author initials="Y." surname="Nakano" fullname="Yuto Nakano">
      <organization></organization>
    </author>
    <author initials="K." surname="Sakamoto" fullname="Kosei Sakamoto">
      <organization></organization>
    </author>
    <author initials="N." surname="Takeuchi" fullname="Nobuyuki Takeuchi">
      <organization></organization>
    </author>
    <date year="2024"/>
  </front>
<refcontent>28th European Symposium on Research in Computer Security, ESORICS 2023</refcontent></reference>
<reference anchor="TIAOXIN" target="https://competitions.cr.yp.to/round2/tiaoxinv2.pdf">
  <front>
    <title>Tiaoxin-346: VERSION 2.0</title>
    <author initials="I." surname="Nikolic" fullname="Ivica Nikolic">
      <organization>Nanyang Technological University, Singapore</organization>
    </author>
    <date year="2014"/>
  </front>
<refcontent>CAESAR Competition</refcontent></reference>
<reference anchor="AEGIS" >
  <front>
    <title>AEGIS: A fast authenticated encryption algorithm</title>
    <author initials="B." surname="Preneel" fullname="Bart Preneel">
      <organization></organization>
    </author>
    <date year="2013"/>
  </front>
<refcontent>Selected Areas in Cryptography (SAC 2013) pp.185-201</refcontent></reference>
<reference anchor="AES" target="https://doi.org/10.6028/NIST.FIPS.197">
  <front>
    <title>FIPS 197 Advanced Encryption Standard (AES)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2001"/>
  </front>
</reference>
<reference anchor="WP-6G" >
  <front>
    <title>Key drivers and research challenges for 6G ubiquitous wireless intelligence</title>
    <author initials="M." surname="Latva-aho" fullname="Matti Latva-aho">
      <organization></organization>
    </author>
    <author initials="K." surname="Leppaenen" fullname="Kari Leppaenen">
      <organization></organization>
    </author>
    <date year="2019"/>
  </front>
</reference>
<reference anchor="SNOW-V" target="https://doi.org/10.13154/tosc.v2019.i3.1-42">
  <front>
    <title>A new SNOW stream cipher called SNOW-V</title>
    <author initials="P." surname="Ekdahl" fullname="Patrik Ekdahl">
      <organization></organization>
    </author>
    <author initials="T." surname="Johansson" fullname="Thomas Johansson">
      <organization></organization>
    </author>
    <author initials="A." surname="Maximov" fullname="Alexander Maximov">
      <organization></organization>
    </author>
    <author initials="J." surname="Yang" fullname="Jing Yang">
      <organization></organization>
    </author>
    <date year="2019"/>
  </front>
<refcontent>IACR Transactions on Symmetric Cryptology, 2019(3), 1-42</refcontent></reference>
<reference anchor="SPEC-5G" target="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3422">
  <front>
    <title>Study on the support of 256-bit algorithms for 5G</title>
    <author >
      <organization>3GPP SA3</organization>
    </author>
    <date year="2018"/>
  </front>
</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="CAESAR" target="https://competitions.cr.yp.to/caesar.html">
  <front>
    <title>CAESAR: Competition for Authenticated Encryption: Security, Applicability, and Robustness</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018"/>
  </front>
</reference>
<reference anchor="DESIGN" target="https://doi.org/10.1007/978-3-662-52993-5_17">
  <front>
    <title>Efficient Design Strategies Based on the AES Round Function</title>
    <author initials="J." surname="Jean" fullname="Jeremy Jean">
      <organization></organization>
    </author>
    <author initials="I." surname="Nikolic" fullname="Ivica Nikolic">
      <organization></organization>
    </author>
    <date year="2016"/>
  </front>
<refcontent>In: Peyrin, T. (eds) Fast Software Encryption. FSE 2016. Lecture Notes in Computer Science, vol 9783</refcontent></reference>


    </references>


<?line 793?>

<section anchor="software-implementation"><name>Software Implementation</name>

<!-- Software Implementation Description -->

<section anchor="implementation-with-simd-instructions"><name>Implementation with SIMD Instructions</name>

<!-- Reference Implementation with SIMD Description -->

<t><xref target="Reference-Implementation-with-SIMD"/> shows a sample implementation of Rocca-S.
<!--
Note that the implementation does not include 
`RoccaEncrypt` and `RoccaDecrypt` of {{Rocca-S-Algorithm}}, and
that `nonce128` of `Initialization` in {{Reference-Implementation-with-SIMD}}
corresponds to `PADN(N)`, where `N` is the nonce.
--></t>

<figure title="Reference Implementation with SIMD" anchor="Reference-Implementation-with-SIMD"><artwork><![CDATA[
#include <memory.h>
#include <immintrin.h>
#include <stdlib.h>
#include <stdint.h>

#define ROCCA_KEY_SIZE       (32)
#define ROCCA_IV_SIZE        (16)
#define ROCCA_MSG_BLOCK_SIZE (32)
#define ROCCA_TAG_SIZE       (32)
#define ROCCA_STATE_NUM      ( 7)

typedef struct ROCCA_CTX {
   uint8_t key[ROCCA_KEY_SIZE/16][16];
   uint8_t state[ROCCA_STATE_NUM][16];
   size_t size_ad;
   size_t size_m;
} rocca_context;

#define load(m)    _mm_loadu_si128((const __m128i *)(m))
#define store(m,a) _mm_storeu_si128((__m128i *)(m),a)
#define xor(a,b)   _mm_xor_si128(a,b)
#define and(a,b)   _mm_and_si128(a,b)
#define enc(a,k)   _mm_aesenc_si128(a,k)
#define setzero()  _mm_setzero_si128()

#define ENCODE_IN_LITTLE_ENDIAN(bytes, v) \
  bytes[ 0] = ((uint64_t)(v) << (        3)); \
  bytes[ 1] = ((uint64_t)(v) >> (1 * 8 - 3)); \
  bytes[ 2] = ((uint64_t)(v) >> (2 * 8 - 3)); \
  bytes[ 3] = ((uint64_t)(v) >> (3 * 8 - 3)); \
  bytes[ 4] = ((uint64_t)(v) >> (4 * 8 - 3)); \
  bytes[ 5] = ((uint64_t)(v) >> (5 * 8 - 3)); \
  bytes[ 6] = ((uint64_t)(v) >> (6 * 8 - 3)); \
  bytes[ 7] = ((uint64_t)(v) >> (7 * 8 - 3)); \
  bytes[ 8] = ((uint64_t)(v) >> (8 * 8 - 3)); \
  bytes[ 9] = 0; \
  bytes[10] = 0; \
  bytes[11] = 0; \
  bytes[12] = 0; \
  bytes[13] = 0; \
  bytes[14] = 0; \
  bytes[15] = 0;

#define FLOORTO(a,b) ((a) / (b) * (b))

#define S_NUM     ROCCA_STATE_NUM
#define M_NUM     ( 2)
#define INIT_LOOP (16)
#define TAG_LOOP  (16)

#define VARS4UPDATE \
  __m128i k[2], state[S_NUM], stateNew[S_NUM], M[M_NUM];

#define VARS4ENCRYPT \
  VARS4UPDATE \
  __m128i Z[M_NUM], C[M_NUM];

#define COPY_TO_LOCAL(ctx) \
  for(size_t i = 0; i < S_NUM; ++i) \
  { state[i] = load(&((ctx)->state[i][0])); }
  
#define COPY_FROM_LOCAL(ctx) \
  for(size_t i = 0; i < S_NUM; ++i) \
  { store(&((ctx)->state[i][0]), state[i]); }
  
#define COPY_TO_LOCAL_IN_TAG(ctx) \
  COPY_TO_LOCAL(ctx)    for(size_t i = 0; i < 2; ++i) \
  { k[i] = load(&((ctx)->key[i][0])); }
  
#define COPY_FROM_LOCAL_IN_INIT(ctx) \
  COPY_FROM_LOCAL(ctx)  for(size_t i = 0; i < 2; ++i) \
  { store(&((ctx)->key[i][0]), k[i]); }

#define UPDATE_STATE(X) \
  stateNew[0] = xor(state[6], state[1]); \
  stateNew[1] = enc(state[0],     X[0]); \
  stateNew[2] = enc(state[1], state[0]); \
  stateNew[3] = enc(state[2], state[6]); \
  stateNew[4] = enc(state[3],     X[1]); \
  stateNew[5] = enc(state[4], state[3]); \
  stateNew[6] = enc(state[5], state[4]); \
  for(size_t i = 0; i < S_NUM; ++i) \
  {state[i] = stateNew[i];}

#define INIT_STATE(key, iv) \
  k[0] = load((key) + 16*0); \
  k[1] = load((key) + 16*1); \
  state[0] = k[1]; \
  state[1] = load(iv); \
  state[2] = load(Z0); \
  state[3] = k[0]; \
  state[4] = load(Z1); \
  state[5] = xor(state[1], state[0]); \
  state[6] = setzero(); \
  M[0] = state[2]; \
  M[1] = state[4]; \
  for(size_t i = 0; i < INIT_LOOP; ++i) { \
    UPDATE_STATE(M) \
  } \
  state[0] = xor(state[0], k[0]); \
  state[1] = xor(state[1], k[0]); \
  state[2] = xor(state[2], k[1]); \
  state[3] = xor(state[3], k[0]); \
  state[4] = xor(state[4], k[0]); \
  state[5] = xor(state[5], k[1]); \
  state[6] = xor(state[6], k[1]);


#define MAKE_STRM \
  Z[0] = enc(xor(state[3], state[5]), state[0]); \
  Z[1] = enc(xor(state[4], state[6]), state[2]);

#define MSG_LOAD(mem, reg) \
  reg[0] = load((mem) +  0); \
  reg[1] = load((mem) + 16);

#define MSG_STORE(mem, reg) \
  store((mem) +  0, reg[0]); \
  store((mem) + 16, reg[1]);

#define XOR_BLOCK(dst, src1, src2) \
  dst[0] = xor(src1[0], src2[0]); \
  dst[1] = xor(src1[1], src2[1]); 

#define MASKXOR_BLOCK(dst, src1, src2, mask) \
  dst[0] = and(xor(src1[0], src2[0]), mask[0]); \
  dst[1] = and(xor(src1[1], src2[1]), mask[1]);
  
#define ADD_AD(input) \
  MSG_LOAD(input, M) \
  UPDATE_STATE(M)
  
#define ADD_AD_LAST_BLOCK(input, size) \
  uint8_t tmpblk[ROCCA_MSG_BLOCK_SIZE] = {0}; \
  memcpy(tmpblk, input, size); \
  MSG_LOAD(tmpblk, M) \
  UPDATE_STATE(M)
  
#define ENCRYPT(output, input) \
  MSG_LOAD(input, M) \
  MAKE_STRM \
  XOR_BLOCK(C, M, Z) \
  MSG_STORE(output, C) \
  UPDATE_STATE(M)

#define ENCRYPT_LAST_BLOCK(output, input, size) \
  uint8_t tmpblk[ROCCA_MSG_BLOCK_SIZE] = {0}; \
  memcpy(tmpblk, input, size); \
  MSG_LOAD(tmpblk, M) \
  MAKE_STRM \
  XOR_BLOCK(C, M, Z) \
  MSG_STORE(tmpblk, C) \
  memcpy(output, tmpblk, size); \
  UPDATE_STATE(M)

#define DECRYPT(output, input) \
  MSG_LOAD(input, C) \
  MAKE_STRM \
  XOR_BLOCK(M, C, Z) \
  MSG_STORE(output, M) \
  UPDATE_STATE(M)

#define DECRYPT_LAST_BLOCK(output, input, size) \
  uint8_t tmpblk[ROCCA_MSG_BLOCK_SIZE] = {0}; \
  uint8_t tmpmsk[ROCCA_MSG_BLOCK_SIZE] = {0}; \
  __m128i mask[M_NUM]; \
  memcpy(tmpblk, input, size); \
  memset(tmpmsk, 0xFF , size); \
  MSG_LOAD(tmpblk, C   ) \
  MSG_LOAD(tmpmsk, mask) \
  MAKE_STRM \
  MASKXOR_BLOCK(M, C, Z, mask) \
  MSG_STORE(tmpblk, M) \
  memcpy(output, tmpblk, size); \
  UPDATE_STATE(M)

#define SET_AD_BITLEN_MSG_BITLEN(sizeAD, sizeM) \
  uint8_t bitlenAD[16]; \
  uint8_t bitlenM [16]; \
  ENCODE_IN_LITTLE_ENDIAN(bitlenAD, sizeAD); \
  ENCODE_IN_LITTLE_ENDIAN(bitlenM , sizeM ); \
  M[0] = load(bitlenAD); \
  M[1] = load(bitlenM );

#define MAKE_TAG(sizeAD, sizeM, tag) \
  SET_AD_BITLEN_MSG_BITLEN(sizeAD, sizeM) \
  for(size_t i = 0; i < TAG_LOOP; ++i) { \
    UPDATE_STATE(M) \
  } \
  __m128i tag128a = setzero(); \
  for(size_t i = 0; i <= 3; ++i) { \
    tag128a = xor(tag128a, state[i]); \
  } \
  __m128i tag128b = setzero(); \
  for(size_t i = 4; i <= 6; ++i) { \
    tag128b = xor(tag128b, state[i]); \
  } \
  store((tag)   , tag128a); \
  store((tag)+16, tag128b);

static const uint8_t Z0[] = {0xcd,0x65,0xef,0x23,0x91, \
0x44,0x37,0x71,0x22,0xae,0x28,0xd7,0x98,0x2f,0x8a,0x42};
static const uint8_t Z1[] = {0xbc,0xdb,0x89,0x81,0xa5, \
0xdb,0xb5,0xe9,0x2f,0x3b,0x4d,0xec,0xcf,0xfb,0xc0,0xb5};

void rocca_init(rocca_context * ctx, const uint8_t * key, \
const uint8_t * iv) {
   VARS4UPDATE
   INIT_STATE(key, iv);
   COPY_FROM_LOCAL_IN_INIT(ctx);
   ctx->size_ad = 0;
   ctx->size_m  = 0;
}

void rocca_add_ad(rocca_context * ctx, const uint8_t * in, size_t size)
{
   VARS4UPDATE
   COPY_TO_LOCAL(ctx);
   size_t i = 0;
   for(size_t size2 = FLOORTO(size, ROCCA_MSG_BLOCK_SIZE); \
   i < size2; i += ROCCA_MSG_BLOCK_SIZE) {
      ADD_AD(in + i);
   }
   if(i < size) {
      ADD_AD_LAST_BLOCK(in + i, size - i);
   }
   COPY_FROM_LOCAL(ctx);
   ctx->size_ad += size;
}

void rocca_encrypt(rocca_context * ctx, uint8_t * out, \
const uint8_t * in, size_t size) {
   VARS4ENCRYPT
   COPY_TO_LOCAL(ctx);
   size_t i = 0;
   for(size_t size2 = FLOORTO(size, ROCCA_MSG_BLOCK_SIZE); \
   i < size2; i += ROCCA_MSG_BLOCK_SIZE) {
      ENCRYPT(out + i, in + i);
   }
   if(i < size) {
      ENCRYPT_LAST_BLOCK(out + i, in + i, size - i);
   }
   COPY_FROM_LOCAL(ctx);
   ctx->size_m += size;
}

void rocca_decrypt(rocca_context * ctx, uint8_t * out, \
const uint8_t * in, size_t size) {
   VARS4ENCRYPT
   COPY_TO_LOCAL(ctx);
   size_t i = 0;
   for(size_t size2 = FLOORTO(size, ROCCA_MSG_BLOCK_SIZE); \
   i < size2; i += ROCCA_MSG_BLOCK_SIZE) {
      DECRYPT(out + i, in + i);
   }
   if(i < size) {
      DECRYPT_LAST_BLOCK(out + i, in + i, size - i);
   }
   COPY_FROM_LOCAL(ctx);
   ctx->size_m += size;
}

void rocca_tag(rocca_context * ctx, uint8_t *tag) {
   VARS4UPDATE
   COPY_TO_LOCAL_IN_TAG(ctx);
   MAKE_TAG(ctx->size_ad, ctx->size_m, tag);
}
]]></artwork></figure>

</section>
<section anchor="test-vector"><name>Test Vector</name>

<!-- Test Vector Description -->

<t>This section gives three test vectors of Rocca-S. The least significant octet of the vector is
shown on the left and the first 128-bit value is shown on the first line.</t>

<figure><artwork><![CDATA[
=== test vector #1===
key =
00000000000000000000000000000000
00000000000000000000000000000000
nonce =
00000000000000000000000000000000
associated data =
00000000000000000000000000000000
00000000000000000000000000000000
plaintext =
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
ciphertext =
9ac3326495a8d414fe407f47b5441050
2481cf79cab8c0a669323e07711e4617
0de5b2fbba0fae8de7c1fccaeefc3626
24fcfdc15f8bb3e64457e8b7e37557bb
tag =
8df934d1483710c9410f6a089c4ced97
91901b7e2e661206202db2cc7a24a386

=== test vector #2===
key =
01010101010101010101010101010101
01010101010101010101010101010101
nonce =
01010101010101010101010101010101
associated data =
01010101010101010101010101010101
01010101010101010101010101010101
plaintext =
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
ciphertext =
559ecb253bcfe26b483bf00e9c748345
978ff921036a6c1fdcb712172836504f
bc64d430a73fc67acd3c3b9c1976d807
90f48357e7fe0c0682624569d3a658fb
tag =
c1fdf39762eca77da8b0f1dae5fff75a
92fb0adfa7940a28c8cadbbbe8e4ca8d

=== test vector #3===
key =
0123456789abcdef0123456789abcdef
0123456789abcdef0123456789abcdef
nonce =
0123456789abcdef0123456789abcdef
associated data =
0123456789abcdef0123456789abcdef
0123456789abcdef0123456789abcdef
plaintext =
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
ciphertext =
b5fc4e2a72b86d1a133c0f0202bdf790
af14a24b2cdb676e427865e12fcc9d30
21d18418fc75dc1912dd2cd79a3beeb2
a98b235de2299b9dda93fd2b5ac8f436
tag =
a078e1351ef2420c8e3a93fd31f5b113
5b15315a5f205534148efbcd63f79f00

=== test vector #4===
key =
11111111111111111111111111111111
22222222222222222222222222222222
nonce =
44444444444444444444444444444444
associated data =

plaintext =
808182838485868788898a8b8c8d8e8f
909192939495969798999a9b9c9d9e9f
a0a1a2a3a4a5a6a7
ciphertext =
e8c7adcc58302893b253c544f5d8e62d
8fbd81160c2f4a95123962088d29f106
422d3f26882fd7b1
tag =
f650eba86fb19dc14a3bbe8bbfad9ec5
b5dd77a4c3f83d2c19ac0393dd47928f

=== test vector #5===
key =
11111111111111111111111111111111
22222222222222222222222222222222
nonce =
44444444444444444444444444444444
associated data =

plaintext =
808182838485868788898a8b8c8d8e8f
909192939495969798999a9b9c9d9e9f
a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
ciphertext =
e8c7adcc58302893b253c544f5d8e62d
8fbd81160c2f4a95123962088d29f106
422d3f26882fd7b1fdee5680476e7e6e
tag =
49bb0ec78cab2c5f40a535925fa2d827
52aba9606426537fc774f06fc0f6fc12

=== test vector #6===
key =
11111111111111111111111111111111
22222222222222222222222222222222
nonce =
44444444444444444444444444444444
associated data =

plaintext =
808182838485868788898a8b8c8d8e8f
909192939495969798999a9b9c9d9e9f
a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
b0b1b2b3b4b5b6b7b8
ciphertext =
e8c7adcc58302893b253c544f5d8e62d
8fbd81160c2f4a95123962088d29f106
422d3f26882fd7b1fdee5680476e7e6e
1fc473cdb2dded85c6
tag =
c674604803963a4b51685fda1f2aa043
934736db2fbab6d188a09f5e0d1c0bf3

=== test vector #7===
key =
11111111111111111111111111111111
22222222222222222222222222222222
nonce =
44444444444444444444444444444444
associated data =

plaintext =
808182838485868788898a8b8c8d8e8f
909192939495969798999a9b9c9d9e9f
a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
b0b1b2b3b4b5b6b7b8b9babbbcbdbebf
ciphertext =
e8c7adcc58302893b253c544f5d8e62d
8fbd81160c2f4a95123962088d29f106
422d3f26882fd7b1fdee5680476e7e6e
1fc473cdb2dded85c692344f3ab85af0
tag =
850599a6624a3e936a77768c7717b926
cc519081730df447127654d6980bcb02
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="acknowledgements"><name>Acknowledgements</name>

<t>This draft is partially supported by a contract of &quot;Research and development on new generation cryptography for secure wireless communication services&quot; among &quot;Research and Development for Expansion of Radio Wave Resources (JPJ000254)&quot;, which was supported by the Ministry of Internal Affairs and Communications, Japan.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

