<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kalosha-stb-tls13-01" category="info" submissionType="independent" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="stb-tls13">STB Cryptographic Parameters for Transport Layer Security (TLS) Protocol Version 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-kalosha-stb-tls13-01"/>
    <author initials="S." surname="Agievich" fullname="Sergey Agievich">
      <organization>APMI, Belarusian State University</organization>
      <address>
        <email>agievichi@bsu.by</email>
      </address>
    </author>
    <author initials="N." surname="Kalosha" fullname="Nikolai Kalosha">
      <organization>IM, Academy of Sciences of Belarus</organization>
      <address>
        <email>kalosha@im.bas-net.by</email>
      </address>
    </author>
    <date year="2026" month="October" day="28"/>
    <abstract>
      <?line 281?>

<t>This specification introduces a subset of STB (STandards of Belarus)
cryptographic algorithms and defines their use in TLS 1.3. The document is
self-contained, i.e., it fully describes the required STB algorithms. It can be
used to develop STB-compliant TLS 1.3 implementations without referring to
the original STB standards.</t>
    </abstract>
  </front>
  <middle>
    <?line 289?>

<section anchor="INTRO">
      <name>Introduction</name>
      <t>In the TLS 1.3 protocol <xref target="RFC9846"/>, the client and server negotiate the
following cryptographic parameters:</t>
      <ol spacing="normal" type="1"><li>
          <t>Hashing and AEAD (Authenticated Encryption with Associated Data) algorithms,
which together define a cipher suite. TLS parties specify their preferred
cipher suites in the handshake hello messages.</t>
        </li>
        <li>
          <t>KEM (Key Encapsulation Mechanism) algorithms, which are defined implicitly
through algebraic group identifiers in the <tt>"supported_groups"</tt> and
<tt>"key_share"</tt> extensions of hello messages. By default, KEM is implemented
through the Diffie-Hellman protocol and cyclic groups for this protocol are
assumed.</t>
        </li>
        <li>
          <t>Digital signature algorithms, which are negotiated through the
<tt>"signature_algorithms"</tt> and <tt>"signature_algorithms_cert"</tt> extensions.</t>
        </li>
      </ol>
      <t>Based on these parameters, the TLS algorithmic stack is constructed, covering
key exchange, bulk encryption, message authentication and authentication of
parties. Changing the parameters modifies the stack without redesigning its
structure.</t>
      <t>This specification introduces a subset of cryptographic algorithms standardized
in Belarus and defines their use as TLS 1.3 cryptographic parameters. These
algorithms are deployed across Belarusian IT systems, powering public key
infrastructures, legally recognized digital signatures, identity cards, VPN
services, etc. The specification aims to improve the recognition of the
algorithms, in particular, to obtain assigned code points for the respective
TLS parameters. This would ensure interoperability and facilitate
interactions with external systems.</t>
      <t>National standards of Belarus are designated by the abbreviation STB.
The relevant standards have additionally been assigned short names:</t>
      <ul spacing="normal">
        <li>
          <t>Belt (<xref target="Stb31"/>, introduced in 2007): block cipher-based symmetric
encryption, data authentication, hashing;</t>
        </li>
        <li>
          <t>Bash (<xref target="Stb77"/>, introduced in 2016): sponge function-based symmetric
encryption, data authentication, hashing;</t>
        </li>
        <li>
          <t>Bign (<xref target="Stb45"/>, introduced in 2011): elliptic curve-based digital signatures
and key transport.</t>
        </li>
      </ul>
      <t>These short names are also used to refer to the elements of the standards.</t>
      <t>This document presents a restricted profile of the STB suite, defining only a
subset of the available algorithms and narrowing their operational parameters.
The sole exception to this restriction is <xref target="BASH.Auto"/>, where the complete
functionality of the auxiliary sponge automaton is specified.</t>
      <aside>
        <t>Caution: This document is not a standard and does not have IETF
community consensus. It makes use of cryptographic algorithms that are
national standards for Belarus. Neither the IETF nor the IRTF has analyzed
these algorithms for suitability for any given application, and it may
contain either intended or unintended weaknesses.</t>
      </aside>
    </section>
    <section anchor="NOTATION">
      <name>Notation</name>
      <section anchor="general">
        <name>General</name>
        <dl>
          <dt><tt>NIL</tt> :</dt>
          <dd>
            <t>empty input, error;</t>
          </dd>
          <dt><tt>!=</tt> :</dt>
          <dd>
            <t>not equal;</t>
          </dd>
          <dt><tt>a^b</tt>, <tt>a^{b}</tt> :</dt>
          <dd>
            <t><tt>b</tt> is the upper index of <tt>a</tt>;</t>
          </dd>
          <dt><tt>a_b</tt>, <tt>a_{b}</tt> :</dt>
          <dd>
            <t><tt>b</tt> is the lower index of <tt>a</tt>;</t>
          </dd>
          <dt><tt>a b</tt>, <tt>a * b</tt> :</dt>
          <dd>
            <t>multiplication;</t>
          </dd>
          <dt><tt>{a, b, c, ...}</tt> :</dt>
          <dd>
            <t>the set of elements <tt>a, b, c, ...</tt>;</t>
          </dd>
          <dt><tt>a in S</tt> :</dt>
          <dd>
            <t><tt>a</tt> belongs to <tt>S</tt>;</t>
          </dd>
          <dt><tt>alg(u_1, u_2, ...)</tt> :</dt>
          <dd>
            <t>call an algorithm <tt>alg</tt> with inputs <tt>u_1, u_2, ...</tt>;</t>
          </dd>
          <dt><tt>a &lt;- u</tt> :</dt>
          <dd>
            <t>assign <tt>u</tt> to <tt>a</tt>;</t>
          </dd>
          <dt><tt>a &lt;- S</tt> :</dt>
          <dd>
            <t>for a set <tt>S</tt>, the same as <tt>a &lt;- u</tt>, where <tt>u</tt> is chosen uniformly at
random from <tt>S</tt>;</t>
          </dd>
          <dt><tt>(a_1, a_2, ...) &lt;- (u_1, u_2, ...)</tt> :</dt>
          <dd>
            <t>the same as <tt>a_1 &lt;- u_1</tt>, <tt>a_2 &lt;- u_2, ...</tt>;</t>
          </dd>
          <dt><tt>(NIL, a_2) &lt;- (u_1, u_2)</tt> :</dt>
          <dd>
            <t>the same as <tt>a_2 &lt;- u_2</tt> (<tt>u_1</tt> is ignored);</t>
          </dd>
          <dt><tt>a &lt;-&gt; b</tt> :</dt>
          <dd>
            <t>swap the values of <tt>a</tt> and <tt>b</tt>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="binary-strings-and-integers">
        <name>Binary Strings and Integers</name>
        <dl>
          <dt><tt>{0, 1}^*</tt> :</dt>
          <dd>
            <t>the set of all binary strings of finite length
(including the empty string of length <tt>0</tt>);</t>
          </dd>
          <dt><tt>|u|</tt> :</dt>
          <dd>
            <t>the bit length of <tt>u in {0, 1}^*</tt>;</t>
          </dd>
          <dt><tt>{0, 1}^n</tt> :</dt>
          <dd>
            <t>the set of <tt>u in {0, 1}^*</tt> such that <tt>|u| = n</tt>;</t>
          </dd>
          <dt><tt>{0, 1}^{n*}</tt> :</dt>
          <dd>
            <t>the set of <tt>u in {0, 1}^*</tt> such that <tt>|u|</tt> is a multiple of <tt>n</tt>;</t>
          </dd>
          <dt><tt>u[i]</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^*</tt> and <tt>0 &lt;= i &lt; |u|</tt>, the <tt>i</tt>th bit of <tt>u</tt>
(bits are numbered from zero);</t>
          </dd>
          <dt><tt>u[:m)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^n</tt> and <tt>0 &lt;= m &lt;= n</tt>, the string <tt>u[0]u[1]...u[m-1]</tt>;</t>
          </dd>
          <dt><tt>u[m:)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^n</tt> and <tt>0 &lt;= m &lt;= n</tt>, the string <tt>u[m]u[m+1]...u[n-1]</tt>;</t>
          </dd>
          <dt><tt>u[-m:)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^n</tt> and <tt>0 &lt;= m &lt;= n</tt>, the string <tt>u[n-m]...u[n-1]</tt>;</t>
          </dd>
          <dt><tt>u[m_1:m_2)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^n</tt> and <tt>0 &lt;= m_1 &lt;= m_2 &lt;= n</tt>, the string
<tt>u[m_1]u[m_1+1]...u[m_2-1]</tt>;</t>
          </dd>
          <dt><tt>u || v</tt> :</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^*</tt>, their concatenation, that is, the string <tt>w</tt>
of length <tt>|u| + |v|</tt> such that <tt>w[:|u|) = u</tt> and <tt>w[-|v|:) = v</tt>;</t>
          </dd>
          <dt><tt>Rep(u, m)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^*</tt> and a positive integer <tt>m</tt>, the concatenation
of <tt>m</tt> copies of <tt>u</tt>;</t>
          </dd>
          <dt><tt>Split(u, m)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^*</tt> and a positive integer <tt>m</tt>, the tuple:
</t>
            <ul spacing="normal">
              <li>
                <t><tt>()</tt> if <tt>|u| = 0</tt>;</t>
              </li>
              <li>
                <t><tt>(u)</tt> if <tt>0 &lt; |u| &lt;= m</tt>;</t>
              </li>
              <li>
                <t><tt>(u[:m), Split(u[m:), m))</tt> if <tt>|u| &gt; m</tt>;</t>
              </li>
            </ul>
          </dd>
          <dt><tt>U mod m</tt> :</dt>
          <dd>
            <t>for an integer <tt>U</tt> and a positive integer <tt>m</tt>, the integer
<tt>r in {0, 1, ..., m-1}</tt> such that <tt>U - r</tt> is a multiple of <tt>m</tt>;</t>
          </dd>
          <dt><tt>u &amp; v</tt> :</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^n</tt>, the string <tt>w in {0, 1}^n</tt> such that
<tt>w[i] = u[i] * v[i]</tt> (bitwise AND);</t>
          </dd>
          <dt><tt>u | v</tt> :</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^n</tt>, the string <tt>w in {0, 1}^n</tt> such that
<tt>w[i] = (u[i] * v[i] + u[i] + v[i]) mod 2</tt> (bitwise OR);</t>
          </dd>
          <dt><tt>u ^ v</tt> :</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^n</tt>, the string <tt>w in {0, 1}^n</tt> such that
<tt>w[i] = (u[i] + v[i]) mod 2</tt> (bitwise exclusive OR);</t>
          </dd>
          <dt><tt>~u</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^n</tt>, the string <tt>u ^ Rep(1, n)</tt> (bitwise NOT);</t>
          </dd>
          <dt><tt>Bin2Int(u)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^{8*}</tt>, the number:
</t>
            <ul spacing="normal">
              <li>
                <t><tt>0</tt>, if <tt>|u| = 0</tt>;</t>
              </li>
              <li>
                <t><tt>128 u[0] + 64 u[1] + ... + u[7]</tt>, if <tt>|u| = 8</tt>;</t>
              </li>
              <li>
                <t><tt>Bin2Int(u[:8)) + 256 * Bin2Int(u[8:))</tt>, if <tt>|u| &gt; 8</tt>
(binary-to-integer conversion);</t>
              </li>
            </ul>
          </dd>
          <dt><tt>Int2Bin(U, 8n)</tt> :</dt>
          <dd>
            <t>for a non-negative integer <tt>U</tt> and a positive integer <tt>n</tt>,
the string <tt>u in {0, 1}^{8n}</tt> such that <tt>Bin2Int(u) = U mod 2^{8n}</tt>
(integer-to-binary conversion);</t>
          </dd>
          <dt><tt>u + v</tt> :</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^{8n}</tt>, the string
<tt>Int2Bin(Bin2Int(u) + Bin2Int(v), 8n)</tt>;</t>
          </dd>
          <dt><tt>u - v</tt> :</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^{8n}</tt>, the string <tt>w in {0, 1}^{8n}</tt> such that
<tt>u = w + v</tt>;</t>
          </dd>
          <dt><tt>Floor(z)</tt> :</dt>
          <dd>
            <t>for a real number <tt>z</tt>, the greatest integer less than or equal to <tt>z</tt>;</t>
          </dd>
          <dt><tt>ShLo(u, r)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^{8n}</tt> and a positive integer <tt>r &lt; 8n</tt>,
the string <tt>Int2Bin(Floor(Bin2Int(u) / 2^r), 8n)</tt>;</t>
          </dd>
          <dt><tt>ShHi(u, r)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^{8n}</tt> and a positive integer <tt>r &lt; 8n</tt>, the string
<tt>Int2Bin(2^r * Bin2Int(u), 8n)</tt>;</t>
          </dd>
          <dt><tt>RotHi(u, r)</tt> :</dt>
          <dd>
            <t>for <tt>u in {0, 1}^{8n}</tt> and a positive integer <tt>r &lt; 8n</tt>, the string
<tt>ShHi(u, r) ^ ShLo(u, 8n - r)</tt>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="miscellaneous">
        <name>Miscellaneous</name>
        <dl>
          <dt><tt>--</tt> :</dt>
          <dd>
            <t>dash;</t>
          </dd>
          <dt><tt>\</tt> :</dt>
          <dd>
            <t>no line break; used to split large sequences of digits into lines for
convenience;</t>
          </dd>
          <dt><tt>0x</tt> :</dt>
          <dd>
            <t>prefix followed by a hexadecimal representation of <tt>u in {0, 1}^{4*}</tt>:
</t>
            <ul spacing="normal">
              <li>
                <t>every four consecutive bits of <tt>u</tt> are represented by a hexadecimal
digit in <tt>{0, 1, ..., 9, A, B, C, D, E, F}</tt> (e.g., <tt>10110001 = 0xB1</tt>);</t>
              </li>
            </ul>
          </dd>
          <dt><tt>OID(obj)</tt> :</dt>
          <dd>
            <t>an identifier of an object <tt>obj</tt>, a string in <tt>{0, 1}^{8*}</tt>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="conventions">
        <name>Conventions</name>
        <t>for <tt>i = 1, 2, ..., m</tt> :</t>
        <ul spacing="normal">
          <li>
            <t>the body of the loop is executed <tt>m</tt> times if <tt>m &gt; 1</tt>;</t>
          </li>
          <li>
            <t>the body of the loop is executed once if <tt>m = 1</tt>;</t>
          </li>
          <li>
            <t>the body of the loop is never executed if <tt>m &lt; 1</tt>;</t>
          </li>
        </ul>
        <t><tt>(a_1, a_2, ..., a_m)</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>a tuple of <tt>m</tt> elements if <tt>m &gt; 1</tt>;</t>
          </li>
          <li>
            <t>a tuple of one element <tt>a_1</tt> if <tt>m = 1</tt>;</t>
          </li>
          <li>
            <t>an empty tuple if <tt>m &lt; 1</tt>.</t>
          </li>
        </ul>
        <t><tt>u[m_1]u[m_1+1]...u[m_2-1]</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>a string of <tt>m_2 - m_1</tt> elements if <tt>m_2 &gt; m_1</tt>;</t>
          </li>
          <li>
            <t>an empty tuple if <tt>m_2 &lt;= m_1</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="BELT">
      <name>Belt Algorithms</name>
      <section anchor="BELT.Prelim">
        <name>Preliminaries</name>
        <t>This specification defines the following algorithms of the Belt family:</t>
        <ul spacing="normal">
          <li>
            <t><tt>belt-block</tt> -- block encryption;</t>
          </li>
          <li>
            <t><tt>belt-hash</tt> -- hashing;</t>
          </li>
          <li>
            <t><tt>belt-che256</tt> -- authenticated encryption.</t>
          </li>
        </ul>
        <t>The <tt>belt-block</tt> algorithms (encryption and decryption) define a block cipher
that processes 128-bit blocks using 256-bit keys. This cipher is the basic
primitive, all other Belt algorithms are built on top of it.</t>
        <t>The <tt>belt-hash</tt> algorithm implements 256-bit hashing. When processing two
128-bit blocks of data, <tt>belt-block</tt> is invoked 3 times, i.e., the hash rate is
approximately 2/3 of the encryption rate.</t>
        <t>The <tt>belt-che256</tt> algorithms (encryption and decryption) implement AEAD in the
CHE (Counter-Hash-Encrypt) mode <xref target="Agi20"/>. This mode is similar to the
well-known GCM mode <xref target="McGVie04"/>, but it is more robust with respect to nonce
misuse. The nonce length is 128 bits, and the authentication tag length is 64
bits.</t>
      </section>
      <section anchor="BELT.Block">
        <name>Block Encryption</name>
        <t>Block encryption is defined by the encryption algorithm <tt>belt-block</tt> and the
corresponding decryption algorithm. This specification describes only
encryption. The <tt>belt-block</tt> algorithm uses auxiliary transformations <tt>G_5</tt>,
<tt>G_13</tt>, <tt>G_21</tt> which, in turn, use an S-box <tt>H</tt>.</t>
        <section anchor="s-box-h">
          <name>S-box <tt>H</tt></name>
          <t>The S-box <tt>H</tt> transforms <tt>x in {0, 1}^8</tt> as follows.</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(x_1, x_2) = Split(x, 4)</tt>.</t>
            </li>
            <li>
              <t>Find the octet <tt>y</tt> in row <tt>x_1</tt> and column <tt>x_2</tt> of <xref target="SBOX"/>
(all data in the table are in the hexadecimal notation).</t>
            </li>
            <li>
              <t>Return <tt>y</tt>.</t>
            </li>
          </ol>
          <table anchor="SBOX">
            <name>The S-box `H`</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">0</th>
                <th align="left">1</th>
                <th align="left">2</th>
                <th align="left">3</th>
                <th align="left">4</th>
                <th align="left">5</th>
                <th align="left">6</th>
                <th align="left">7</th>
                <th align="left">8</th>
                <th align="left">9</th>
                <th align="left">A</th>
                <th align="left">B</th>
                <th align="left">C</th>
                <th align="left">D</th>
                <th align="left">E</th>
                <th align="left">F</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">B1</td>
                <td align="left">94</td>
                <td align="left">BA</td>
                <td align="left">C8</td>
                <td align="left">0A</td>
                <td align="left">08</td>
                <td align="left">F5</td>
                <td align="left">3B</td>
                <td align="left">36</td>
                <td align="left">6D</td>
                <td align="left">00</td>
                <td align="left">8E</td>
                <td align="left">58</td>
                <td align="left">4A</td>
                <td align="left">5D</td>
                <td align="left">E4</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">85</td>
                <td align="left">04</td>
                <td align="left">FA</td>
                <td align="left">9D</td>
                <td align="left">1B</td>
                <td align="left">B6</td>
                <td align="left">C7</td>
                <td align="left">AC</td>
                <td align="left">25</td>
                <td align="left">2E</td>
                <td align="left">72</td>
                <td align="left">C2</td>
                <td align="left">02</td>
                <td align="left">FD</td>
                <td align="left">CE</td>
                <td align="left">0D</td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">5B</td>
                <td align="left">E3</td>
                <td align="left">D6</td>
                <td align="left">12</td>
                <td align="left">17</td>
                <td align="left">B9</td>
                <td align="left">61</td>
                <td align="left">81</td>
                <td align="left">FE</td>
                <td align="left">67</td>
                <td align="left">86</td>
                <td align="left">AD</td>
                <td align="left">71</td>
                <td align="left">6B</td>
                <td align="left">89</td>
                <td align="left">0B</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">5C</td>
                <td align="left">B0</td>
                <td align="left">C0</td>
                <td align="left">FF</td>
                <td align="left">33</td>
                <td align="left">C3</td>
                <td align="left">56</td>
                <td align="left">B8</td>
                <td align="left">35</td>
                <td align="left">C4</td>
                <td align="left">05</td>
                <td align="left">AE</td>
                <td align="left">D8</td>
                <td align="left">E0</td>
                <td align="left">7F</td>
                <td align="left">99</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">E1</td>
                <td align="left">2B</td>
                <td align="left">DC</td>
                <td align="left">1A</td>
                <td align="left">E2</td>
                <td align="left">82</td>
                <td align="left">57</td>
                <td align="left">EC</td>
                <td align="left">70</td>
                <td align="left">3F</td>
                <td align="left">CC</td>
                <td align="left">F0</td>
                <td align="left">95</td>
                <td align="left">EE</td>
                <td align="left">8D</td>
                <td align="left">F1</td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">C1</td>
                <td align="left">AB</td>
                <td align="left">76</td>
                <td align="left">38</td>
                <td align="left">9F</td>
                <td align="left">E6</td>
                <td align="left">78</td>
                <td align="left">CA</td>
                <td align="left">F7</td>
                <td align="left">C6</td>
                <td align="left">F8</td>
                <td align="left">60</td>
                <td align="left">D5</td>
                <td align="left">BB</td>
                <td align="left">9C</td>
                <td align="left">4F</td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="left">F3</td>
                <td align="left">3C</td>
                <td align="left">65</td>
                <td align="left">7B</td>
                <td align="left">63</td>
                <td align="left">7C</td>
                <td align="left">30</td>
                <td align="left">6A</td>
                <td align="left">DD</td>
                <td align="left">4E</td>
                <td align="left">A7</td>
                <td align="left">79</td>
                <td align="left">9E</td>
                <td align="left">B2</td>
                <td align="left">3D</td>
                <td align="left">31</td>
              </tr>
              <tr>
                <td align="left">7</td>
                <td align="left">3E</td>
                <td align="left">98</td>
                <td align="left">B5</td>
                <td align="left">6E</td>
                <td align="left">27</td>
                <td align="left">D3</td>
                <td align="left">BC</td>
                <td align="left">CF</td>
                <td align="left">59</td>
                <td align="left">1E</td>
                <td align="left">18</td>
                <td align="left">1F</td>
                <td align="left">4C</td>
                <td align="left">5A</td>
                <td align="left">B7</td>
                <td align="left">93</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">E9</td>
                <td align="left">DE</td>
                <td align="left">E7</td>
                <td align="left">2C</td>
                <td align="left">8F</td>
                <td align="left">0C</td>
                <td align="left">0F</td>
                <td align="left">A6</td>
                <td align="left">2D</td>
                <td align="left">DB</td>
                <td align="left">49</td>
                <td align="left">F4</td>
                <td align="left">6F</td>
                <td align="left">73</td>
                <td align="left">96</td>
                <td align="left">47</td>
              </tr>
              <tr>
                <td align="left">9</td>
                <td align="left">06</td>
                <td align="left">07</td>
                <td align="left">53</td>
                <td align="left">16</td>
                <td align="left">ED</td>
                <td align="left">24</td>
                <td align="left">7A</td>
                <td align="left">37</td>
                <td align="left">39</td>
                <td align="left">CB</td>
                <td align="left">A3</td>
                <td align="left">83</td>
                <td align="left">03</td>
                <td align="left">A9</td>
                <td align="left">8B</td>
                <td align="left">F6</td>
              </tr>
              <tr>
                <td align="left">A</td>
                <td align="left">92</td>
                <td align="left">BD</td>
                <td align="left">9B</td>
                <td align="left">1C</td>
                <td align="left">E5</td>
                <td align="left">D1</td>
                <td align="left">41</td>
                <td align="left">01</td>
                <td align="left">54</td>
                <td align="left">45</td>
                <td align="left">FB</td>
                <td align="left">C9</td>
                <td align="left">5E</td>
                <td align="left">4D</td>
                <td align="left">0E</td>
                <td align="left">F2</td>
              </tr>
              <tr>
                <td align="left">B</td>
                <td align="left">68</td>
                <td align="left">20</td>
                <td align="left">80</td>
                <td align="left">AA</td>
                <td align="left">22</td>
                <td align="left">7D</td>
                <td align="left">64</td>
                <td align="left">2F</td>
                <td align="left">26</td>
                <td align="left">87</td>
                <td align="left">F9</td>
                <td align="left">34</td>
                <td align="left">90</td>
                <td align="left">40</td>
                <td align="left">55</td>
                <td align="left">11</td>
              </tr>
              <tr>
                <td align="left">C</td>
                <td align="left">BE</td>
                <td align="left">32</td>
                <td align="left">97</td>
                <td align="left">13</td>
                <td align="left">43</td>
                <td align="left">FC</td>
                <td align="left">9A</td>
                <td align="left">48</td>
                <td align="left">A0</td>
                <td align="left">2A</td>
                <td align="left">88</td>
                <td align="left">5F</td>
                <td align="left">19</td>
                <td align="left">4B</td>
                <td align="left">09</td>
                <td align="left">A1</td>
              </tr>
              <tr>
                <td align="left">D</td>
                <td align="left">7E</td>
                <td align="left">CD</td>
                <td align="left">A4</td>
                <td align="left">D0</td>
                <td align="left">15</td>
                <td align="left">44</td>
                <td align="left">AF</td>
                <td align="left">8C</td>
                <td align="left">A5</td>
                <td align="left">84</td>
                <td align="left">50</td>
                <td align="left">BF</td>
                <td align="left">66</td>
                <td align="left">D2</td>
                <td align="left">E8</td>
                <td align="left">8A</td>
              </tr>
              <tr>
                <td align="left">E</td>
                <td align="left">A2</td>
                <td align="left">D7</td>
                <td align="left">46</td>
                <td align="left">52</td>
                <td align="left">42</td>
                <td align="left">A8</td>
                <td align="left">DF</td>
                <td align="left">B3</td>
                <td align="left">69</td>
                <td align="left">74</td>
                <td align="left">C5</td>
                <td align="left">51</td>
                <td align="left">EB</td>
                <td align="left">23</td>
                <td align="left">29</td>
                <td align="left">21</td>
              </tr>
              <tr>
                <td align="left">F</td>
                <td align="left">D4</td>
                <td align="left">EF</td>
                <td align="left">D9</td>
                <td align="left">B4</td>
                <td align="left">3A</td>
                <td align="left">62</td>
                <td align="left">28</td>
                <td align="left">75</td>
                <td align="left">91</td>
                <td align="left">14</td>
                <td align="left">10</td>
                <td align="left">EA</td>
                <td align="left">77</td>
                <td align="left">6C</td>
                <td align="left">DA</td>
                <td align="left">1D</td>
              </tr>
            </tbody>
          </table>
          <t>The S-box defines a family of constants <tt>BeltH</tt>. The family is parameterized by
integers <tt>u &gt;= 0</tt> and <tt>n &gt; 0</tt> such that <tt>u + n &lt;= 256</tt>. A particular
constant <tt>BeltH(u, n)</tt> is defined as
<tt>H(Int2Bin(u, 8)) || H(Int2Bin(u + 1, 8)) || ... || H(Int2Bin(u + n - 1, 8))</tt>.
For example, <tt>BeltH(79, 3) = 0xF1C1AB</tt> (<tt>Int2Bin(79, 8) = 0x4F</tt>).</t>
          <aside>
            <t>Note: <tt>H</tt> is constructed using exponentiation in a finite field of size <tt>2^8</tt>
              <xref target="AgiAfo05"/>. The array <tt>H[0], H[1], ..., H[255]</tt>, where
<tt>H[x] = H(Int2Bin(x, 8))</tt>, is generated by the following algorithm:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>H[10] &lt;- 0x00</tt>, <tt>H[11] &lt;- 0x8E</tt>.</t>
              </li>
              <li>
                <t>For <tt>x = 12, 13, ..., 9 + 256</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t><tt>t &lt;- H[(x - 1) mod 256]</tt>;</t>
                  </li>
                  <li>
                    <t>for <tt>i = 0, 1, ..., 115</tt>:
                    </t>
                    <ol spacing="normal" type="1"><li>
                        <t><tt>t &lt;- Clock(t)</tt>;</t>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <t><tt>H[x mod 256] &lt;- t</tt>.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Return <tt>H</tt>.</t>
              </li>
            </ol>
            <t>Here <tt>Clock(t) = (t_2 ^ t_3 ^ t_7 ^ t_8) t_1 t_2 ... t_7</tt> for
<tt>t = t_1 t_2 ... t_8 in {0, 1}^8</tt>.</t>
          </aside>
        </section>
        <section anchor="the-transformations-gr">
          <name>The Transformations <tt>G_r</tt></name>
          <t>The transformations <tt>G_5</tt>, <tt>G_13</tt>, <tt>G_21</tt> map the set <tt>{0, 1}^32</tt> to itself.
They are derived from an algorithm <tt>G</tt> by taking <tt>G_r(x) = G(x, r)</tt>.</t>
          <t>The algorithm <tt>G</tt> is defined as follows.</t>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>x in {0, 1}^32</tt>;</t>
            </li>
            <li>
              <t><tt>r in {5, 13, 21}</tt>.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>y in {0, 1}^32</tt>.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(x_1, x_2, x_3, x_4) = Split(x, 8)</tt>.</t>
            </li>
            <li>
              <t><tt>y &lt;- RotHi(H(x_1) || H(x_2) || H(x_3) || H(x_4), r)</tt>.</t>
            </li>
            <li>
              <t>Return <tt>y</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-belt-block-algorithm">
          <name>The <tt>belt-block</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^128</tt> -- a plaintext block;</t>
            </li>
            <li>
              <t><tt>K in {0, 1}^256</tt> -- a key.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Y in {0, 1}^128</tt> -- the encrypted block.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>(a, b, c, d) &lt;- Split(X, 32)</tt>.</t>
            </li>
            <li>
              <t><tt>(k[1], k[2], ..., k[56]) &lt;- Split(Rep(K, 7), 32)</tt>.</t>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., 8</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>b &lt;- b ^ G_5(a + k[7i-6])</tt>;</t>
                </li>
                <li>
                  <t><tt>c &lt;- c ^ G_21(d + k[7i-5])</tt>;</t>
                </li>
                <li>
                  <t><tt>a &lt;- a - G_13(b + k[7i-4])</tt>;</t>
                </li>
                <li>
                  <t><tt>e &lt;- G_21(b + c + k[7i-3]) ^ Int2Bin(i, 32)</tt>;</t>
                </li>
                <li>
                  <t><tt>b &lt;- b + e</tt>;</t>
                </li>
                <li>
                  <t><tt>c &lt;- c - e</tt>;</t>
                </li>
                <li>
                  <t><tt>d &lt;- d + G_13(c + k[7i-2])</tt>;</t>
                </li>
                <li>
                  <t><tt>b &lt;- b ^ G_21(a + k[7i-1])</tt>;</t>
                </li>
                <li>
                  <t><tt>c &lt;- c ^ G_5(d + k[7i])</tt>;</t>
                </li>
                <li>
                  <t><tt>a &lt;-&gt; b</tt>;</t>
                </li>
                <li>
                  <t><tt>c &lt;-&gt; d</tt>;</t>
                </li>
                <li>
                  <t><tt>b &lt;-&gt; c</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>Y &lt;- b || d || a || c</tt>.</t>
            </li>
            <li>
              <t>Return <tt>Y</tt>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="BELT.Hash">
        <name>Hashing</name>
        <t>Hashing is defined by the <tt>belt-hash</tt> algorithm
which uses the auxiliary algorithm <tt>belt-compress</tt>.</t>
        <section anchor="the-belt-compress-algorithm">
          <name>The <tt>belt-compress</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^512</tt>.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>S in {0, 1}^128</tt>;</t>
            </li>
            <li>
              <t><tt>Y in {0, 1}^256</tt>.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(X_1, X_2, X_3, X_4) = Split(X, 128)</tt>.</t>
            </li>
            <li>
              <t><tt>S &lt;- belt-block(X_3 ^ X_4, X_1 || X_2) ^ X_3 ^ X_4</tt>.</t>
            </li>
            <li>
              <t><tt>Y_1 &lt;- belt-block(X_1, S || X_4) ^ X_1</tt>.</t>
            </li>
            <li>
              <t><tt>Y_2 &lt;- belt-block(X_2, (S ^ Rep(1, 128)) || X_3) ^ X_2</tt>.</t>
            </li>
            <li>
              <t>Return <tt>(S, Y)</tt>, where <tt>Y = Y_1 || Y_2</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-belt-hash-algorithm">
          <name>The <tt>belt-hash</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^*</tt> -- data to be hashed.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>H in {0, 1}^256</tt> -- the hash value.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(X_1, X_2, ..., X_n) = Split(X, 256)</tt>.</t>
            </li>
            <li>
              <t><tt>r &lt;- Int2Bin(|X|, 128)</tt>.</t>
            </li>
            <li>
              <t><tt>s &lt;- Rep(0, 128)</tt>.</t>
            </li>
            <li>
              <t><tt>h &lt;- BeltH(0, 32)</tt>.</t>
            </li>
            <li>
              <t><tt>X_n &lt;- X_n || Rep(0, 256 - |X_n|)</tt>.</t>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., n</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>(t, h) &lt;- belt-compress(X_i || h)</tt>;</t>
                </li>
                <li>
                  <t><tt>s &lt;- s ^ t</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>(NIL, H) &lt;- belt-compress(r || s || h)</tt>.</t>
            </li>
            <li>
              <t>Return <tt>H</tt>.</t>
            </li>
          </ol>
          <aside>
            <t>Note: if <tt>X == NIL</tt>, then <tt>n == 0</tt> and the steps 5 and 6 are not performed.</t>
          </aside>
        </section>
      </section>
      <section anchor="BELT.AE">
        <name>Authenticated Encryption</name>
        <t>Authenticated encryption is defined by the encryption algorithm <tt>belt-che256</tt>
and the decryption algorithm <tt>belt-che256-inv</tt>.</t>
        <t>128-bit blocks are interpreted as polynomials of degree less than 128 over the
binary field <tt>{0, 1}</tt>. The polynomials are added and multiplied modulo a fixed
irreducible polynomial of degree 128. Thus, operations on polynomials are
performed in a finite field (Galois field, see <xref target="LidNie97"/>) of size <tt>2^128</tt>.</t>
        <t>The transition from blocks to polynomials and the field multiplication are
defined as follows.</t>
        <dl>
          <dt><tt>u(x)</tt>:</dt>
          <dd>
            <t>for <tt>u in {0, 1}^{8*}</tt>, the polynomial:</t>
          </dd>
        </dl>
        <ul spacing="normal">
          <li>
            <t><tt>0</tt>, if <tt>|u| = 0</tt>;</t>
          </li>
          <li>
            <t><tt>u[0] x^7 + u[1] x^6 + ... + u[7]</tt>, if <tt>|u| = 8</tt>;</t>
          </li>
          <li>
            <t><tt>u[:8)(x) + x^8 u[8:)(x)</tt>, if <tt>|u| &gt; 8</tt>;</t>
          </li>
        </ul>
        <dl>
          <dt><tt>u(x) mod f(x)</tt>:</dt>
          <dd>
            <t>for a polynomial <tt>u(x)</tt> and a nonzero polynomial <tt>f(x)</tt>,
the remainder of the division of <tt>u(x)</tt> by <tt>f(x)</tt>;</t>
          </dd>
          <dt><tt>u * v</tt>:</dt>
          <dd>
            <t>for <tt>u, v in {0, 1}^128</tt>, the string <tt>w in {0, 1}^128</tt> such
that <tt>w(x) = u(x) v(x) mod f(x)</tt>, where <tt>f(x) = x^128 + x^7 + x^2 + x + 1</tt>.</t>
          </dd>
        </dl>
        <t>The algorithms use a constant <tt>C in {0, 1}^128</tt> defined as
<tt>C = 0x02 || Rep(0, 120)</tt>. Its polynomial representation is <tt>C(x) = x</tt>.</t>
        <section anchor="the-belt-che256-algorithm">
          <name>The <tt>belt-che256</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^*</tt> -- plaintext, <tt>|X| &lt; 2^64</tt>;</t>
            </li>
            <li>
              <t><tt>I in {0, 1}^*</tt> -- associated data, <tt>|I| &lt; 2^64</tt>;</t>
            </li>
            <li>
              <t><tt>K in {0, 1}^256</tt> -- a key;</t>
            </li>
            <li>
              <t><tt>S in {0, 1}^128</tt> -- a nonce.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Y in {0, 1}^{|X|}</tt> -- ciphertext;</t>
            </li>
            <li>
              <t><tt>T in {0, 1}^64</tt> -- the authentication tag.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>(X_1, X_2, ..., X_n) &lt;- Split(X, 128)</tt>.</t>
            </li>
            <li>
              <t><tt>(I_1, I_2, ..., I_m) &lt;- Split(I, 128)</tt>.</t>
            </li>
            <li>
              <t>Set:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>s &lt;- belt-block(S, K)</tt>;</t>
                </li>
                <li>
                  <t><tt>r &lt;- s</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- BeltH(0, 16)</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., m</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>t &lt;- t ^ (I_i || Rep(0, 128 - |I_i|))</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- t * r</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., n</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>s &lt;- (s * C) ^ Int2Bin(1, 128)</tt>;</t>
                </li>
                <li>
                  <t><tt>Y_i &lt;- X_i ^ belt-block(s, K)[:|X_i|)</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- t ^ (Y_i || Rep(0, 128 - |Y_i|))</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- t * r</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>t &lt;- t ^ (Int2Bin(|I|, 64) || Int2Bin(|X|, 64))</tt>.</t>
            </li>
            <li>
              <t><tt>t &lt;- belt-block(t * r, K)</tt>.</t>
            </li>
            <li>
              <t><tt>T &lt;- t[:64)</tt>.</t>
            </li>
            <li>
              <t>Return <tt>(Y, T)</tt>, where <tt>Y = Y_1 || Y_2 || ... || Y_n</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-belt-che256-inv-algorithm">
          <name>The <tt>belt-che256-inv</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Y in {0, 1}^*</tt> -- ciphertext, <tt>|Y| &lt; 2^64</tt>;</t>
            </li>
            <li>
              <t><tt>I in {0, 1}^*</tt> -- associated data, <tt>|I| &lt; 2^64</tt>;</t>
            </li>
            <li>
              <t><tt>T in {0, 1}^64</tt> -- an authentication tag;</t>
            </li>
            <li>
              <t><tt>K in {0, 1}^256</tt> -- a key;</t>
            </li>
            <li>
              <t><tt>S in {0, 1}^128</tt> -- a nonce.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>NIL</tt> -- an authentication error, or <tt>X in {0, 1}^|Y|</tt> -- plaintext.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(Y_1, Y_2, ..., Y_n) = Split(Y, 128)</tt>.</t>
            </li>
            <li>
              <t>Parse <tt>(I_1, I_2, ..., I_m) = Split(I, 128)</tt>.</t>
            </li>
            <li>
              <t>Set:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>s &lt;- belt-block(S, K)</tt>;</t>
                </li>
                <li>
                  <t><tt>r &lt;- s</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- BeltH(0, 16)</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., m</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>t &lt;- t ^ (I_i || Rep(0, 128 - |I_i|))</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- t * r</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., n</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>t &lt;- t ^ (Y_i || Rep(0, 128 - |Y_i|))</tt>;</t>
                </li>
                <li>
                  <t><tt>t &lt;- t * r</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>t &lt;- t ^ (Int2Bin(|I|, 64) || Int2Bin(|Y|, 64))</tt>.</t>
            </li>
            <li>
              <t><tt>t &lt;- belt-block(t * r, K)</tt>.</t>
            </li>
            <li>
              <t>If <tt>T != t[:64)</tt>, then return <tt>NIL</tt>.</t>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., n</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>s &lt;- (s * C) ^ Int2Bin(1, 128)</tt>;</t>
                </li>
                <li>
                  <t><tt>X_i &lt;- Y_i ^ belt-block(s, K)[:|Y_i|)</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <tt>X = X_1 || X_2 || ... || X_n</tt>.</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="BASH">
      <name>Bash Algorithms</name>
      <section anchor="BASH.Prelim">
        <name>Preliminaries</name>
        <t>This specification defines the following algorithms of the Bash family:</t>
        <ul spacing="normal">
          <li>
            <t><tt>bash-f</tt> -- the base sponge function;</t>
          </li>
          <li>
            <t><tt>bash256</tt>, <tt>bash384</tt>, <tt>bash512</tt> -- hashing;</t>
          </li>
          <li>
            <t><tt>bash-prg-ae2561</tt> -- authenticated encryption.</t>
          </li>
        </ul>
        <t>The <tt>bash-f</tt> algorithm implements a 1536-bit sponge function, that is, a
permutation on the set <tt>{0, 1}^1536</tt>. The sponge function is the basic
primitive for all other Bash algorithms. These algorithms use <tt>bash-f</tt> either
directly or through an abstraction layer called a sponge automaton. The
automaton processes a 1536-bit sponge state using a prescribed set of commands
on top of <tt>bash-f</tt>. The design of <tt>bash-f</tt> is explained in <xref target="AMMS17"/>.</t>
        <t>The <tt>bashLLL</tt> algorithm, <tt>LLL in {256, 384, 512}</tt>, implements <tt>LLL</tt>-bit
hashing.</t>
        <t>The <tt>bash-prg-ae2561</tt> algorithms (encryption and decryption) implement AEAD
with 256-bit authentication tags and up to 480-bit preambles. Preambles may
contain customization strings, public data to be authenticated, nonces and
other non-secret objects.</t>
      </section>
      <section anchor="BASH.F">
        <name>The Sponge Function</name>
        <t>The sponge function <tt>bash-f</tt> is defined through an auxiliary algorithm
<tt>bash-s</tt>.</t>
        <section anchor="the-bash-s-algorithm">
          <name>The <tt>bash-s</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>W_0, W_1, W_2 in {0, 1}^64</tt>;</t>
            </li>
            <li>
              <t><tt>m_1, n_1, m_2, n_2 in {1, 2, ..., 63}</tt>.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>(W_0, W_1, W_2)</tt> -- the transformed input strings.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>T_0 &lt;- RotHi(W_0, m_1)</tt>.</t>
            </li>
            <li>
              <t><tt>W_0 &lt;- W_0 ^ W_1 ^ W_2</tt>.</t>
            </li>
            <li>
              <t><tt>T_1 &lt;- W_1 ^ RotHi(W_0, n_1)</tt>.</t>
            </li>
            <li>
              <t><tt>W_1 &lt;- T_0 ^ T_1</tt>.</t>
            </li>
            <li>
              <t><tt>W_2 &lt;- W_2 ^ RotHi(W_2, m_2) ^ RotHi(T_1, n_2)</tt>.</t>
            </li>
            <li>
              <t><tt>T_0 &lt;- ~W_2</tt>.</t>
            </li>
            <li>
              <t><tt>T_1 &lt;- W_0 | W_2</tt>.</t>
            </li>
            <li>
              <t><tt>T_2 &lt;- W_0 &amp; W_1</tt>.</t>
            </li>
            <li>
              <t><tt>T_0 &lt;- T_0 | W_1</tt>.</t>
            </li>
            <li>
              <t><tt>W_1 &lt;- W_1 ^ T_1</tt>.</t>
            </li>
            <li>
              <t><tt>W_2 &lt;- W_2 ^ T_2</tt>.</t>
            </li>
            <li>
              <t><tt>W_0 &lt;- W_0 ^ T_0</tt>.</t>
            </li>
            <li>
              <t>Return <tt>(W_0, W_1, W_2)</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-bash-f-algorithm">
          <name>The <tt>bash-f</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>S in {0, 1}^1536</tt> -- a state.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>S in {0, 1}^1536</tt> -- the transformed state.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(S_0, S_1, ..., S_23) = Split(S, 64)</tt>.</t>
            </li>
            <li>
              <t><tt>C &lt;- Bin2Int(BeltH(0, 8))</tt>.</t>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., 24</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>(m_1, n_1, m_2, n_2) &lt;- (8, 53, 14, 1)</tt>.</t>
                </li>
                <li>
                  <t>for <tt>j = 0, 1, ..., 7</tt>:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t><tt>(S_j, S_{8+j}, S_{16+j}) &lt;-</tt>
                        <tt>bash-s(S_j, S_{8+j}, S_{16+j}, m_1, n_1, m_2, n_2)</tt>.</t>
                    </li>
                    <li>
                      <t><tt>m_1 &lt;- (7 * m_1) mod 64</tt>, <tt>n_1 &lt;- (7 * n_1) mod 64</tt>.
<tt>m_2 &lt;- (7 * m_2) mod 64</tt>, <tt>n_2 &lt;- (7 * n_2) mod 64</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t><tt>(S_0,  S_1,  S_2,  S_3,  S_4,  S_5,  S_6,  S_7,</tt>
                    <tt>S_8,  S_9,  S_10, S_11, S_12, S_13, S_14, S_15,</tt>
                    <tt>S_16, S_17, S_18, S_19, S_20, S_21, S_22, S_23)</tt>
                    <tt>&lt;-</tt>
                    <tt>(S_15, S_10, S_9,  S_12, S_11, S_14, S_13, S_8,</tt>
                    <tt>S_17, S_16, S_19, S_18, S_21, S_20, S_23, S_22,</tt>
                    <tt>S_6,  S_3,  S_0,  S_5,  S_2,  S_7,  S_4,  S_1)</tt>.</t>
                </li>
                <li>
                  <t><tt>S_23 &lt;- S_23 ^ C</tt>.</t>
                </li>
                <li>
                  <t>if <tt>C mod 2 = 0</tt>, then <tt>C &lt;- ShLo(C, 1)</tt>
else <tt>C &lt;- ShLo(C, 1) ^ 0xAED8E07F99E12BDC</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <tt>S_0 || S_1 || ... || S_23</tt>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="BASH.Auto">
        <name>The Sponge Automaton</name>
        <t>For reasons of completeness, we describe the full functionality of the Bash
automaton. Note that <tt>bash-prg-ae2561</tt> uses only a part of this functionality.</t>
        <section anchor="states-and-parameters">
          <name>States and Parameters</name>
          <t>An automaton processes a state <tt>S in {0, 1}^1536</tt> using the following
parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>l in {128, 192, 256}</tt> -- security level;</t>
            </li>
            <li>
              <t><tt>d in {1, 2}</tt> -- capacity level;</t>
            </li>
            <li>
              <t><tt>r in {1536 - 2dl, 1536 - l - dl/2}</tt> -- buffer length;</t>
            </li>
            <li>
              <t><tt>pos in {0, 1, ..., r - 1}</tt> -- current buffer offset.</t>
            </li>
          </ul>
          <t>Parameters <tt>l</tt> and <tt>d</tt> are set when the automaton is initialized and do not
change thereafter.</t>
          <t>The state <tt>S</tt> is split into two parts:</t>
          <ol spacing="normal" type="1"><li>
              <t>The buffer <tt>S[:r)</tt> used for input and output.</t>
            </li>
            <li>
              <t>The internal memory <tt>S[r:)</tt>. The bit <tt>S[r]</tt> of the memory has a special
purpose: the internal command <tt>commit</tt> inverts it to signal the completion
of the previous command.</t>
            </li>
          </ol>
        </section>
        <section anchor="commands">
          <name>Commands</name>
          <t>The state is processed using the following commands:</t>
          <ul spacing="normal">
            <li>
              <t><tt>start</tt>: initialize;</t>
            </li>
            <li>
              <t><tt>commit</tt>: complete execution of the previous command (internal command, can
 only be called from other commands);</t>
            </li>
            <li>
              <t><tt>restart</tt>: re-initialize;</t>
            </li>
            <li>
              <t><tt>absorb</tt>: process input data;</t>
            </li>
            <li>
              <t><tt>squeeze</tt>: extract output data;</t>
            </li>
            <li>
              <t><tt>encrypt</tt> / <tt>decrypt</tt>: process plaintext / ciphertext;</t>
            </li>
            <li>
              <t><tt>ratchet</tt>: update the state irreversibly.</t>
            </li>
          </ul>
          <t>The processed data are encoded as follows:</t>
          <table anchor="DTYPES">
            <name>Data Types in the Bash Automaton</name>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">Description</th>
                <th align="left">Code (6 bits)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>NULL</tt></td>
                <td align="left">Service data</td>
                <td align="left">
                  <tt>000000</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>KEY</tt></td>
                <td align="left">Key</td>
                <td align="left">
                  <tt>000001</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>DATA</tt></td>
                <td align="left">Public input data</td>
                <td align="left">
                  <tt>000010</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>TEXT</tt></td>
                <td align="left">Plaintext or ciphertext</td>
                <td align="left">
                  <tt>000011</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>OUT</tt></td>
                <td align="left">Output data</td>
                <td align="left">
                  <tt>000100</tt></td>
              </tr>
            </tbody>
          </table>
          <section anchor="the-start-command">
            <name>The <tt>start</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>A in {0, 1}^{32*}</tt> -- a preamble (<tt>|A| &lt;= 480</tt>);</t>
              </li>
              <li>
                <t><tt>K in {0, 1}^{32*}</tt> -- a key (<tt>|K| &lt;= 480</tt>; if <tt>K != NIL</tt>, then <tt>|K| &gt;= l</tt>).</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t>None.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t>If <tt>K != NIL</tt>, then <tt>r &lt;- 1536 - l - dl/2</tt>
else <tt>r &lt;- 1536 - 2dl</tt>.</t>
              </li>
              <li>
                <t><tt>pos &lt;- 8 + |A| + |K|</tt>.</t>
              </li>
              <li>
                <t><tt>S[:pos) &lt;- Int2Bin(|A|/2 + |K|/32, 8) || A || K</tt>.</t>
              </li>
              <li>
                <t><tt>S[pos:1472) &lt;- Rep(0, 256 - |X_n|)</tt>.</t>
              </li>
              <li>
                <t><tt>S[1472:) &lt;- Int2Bin(l/4 + d, 64)</tt>.</t>
              </li>
              <li>
                <t>Store parameters <tt>(l, d, r, pos)</tt> with state <tt>S</tt>.</t>
              </li>
            </ol>
          </section>
          <section anchor="the-commit-command">
            <name>The <tt>commit</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>t in {0, 1}^6</tt> -- data type (see the table above).</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t>None.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>S[pos:pos+8) &lt;- S[pos:pos+8) ^ (t || 01)</tt>.</t>
              </li>
              <li>
                <t><tt>S[r] &lt;- S[r] ^ 1</tt>.</t>
              </li>
              <li>
                <t><tt>S &lt;- bash-f(S)</tt>.</t>
              </li>
              <li>
                <t><tt>pos &lt;- 0</tt>.</t>
              </li>
            </ol>
          </section>
          <section anchor="the-restart-command">
            <name>The <tt>restart</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>A in {0, 1}^{32*}</tt> -- a preamble (<tt>|A| &lt;= 480</tt>);</t>
              </li>
              <li>
                <t><tt>K in {0, 1}^{32*}</tt> -- a key (<tt>|K| &lt;= 480</tt>; if <tt>K != NIL</tt>, then <tt>|K| &gt;= l</tt>).</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t>None.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t>If <tt>K != NIL</tt>, then:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t><tt>commit(KEY)</tt>;</t>
                  </li>
                  <li>
                    <t><tt>r &lt;- 1536 - l - dl/2</tt>.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Else <tt>commit(NULL)</tt>.</t>
              </li>
              <li>
                <t><tt>pos &lt;- 8 + |A| + |K|</tt>.</t>
              </li>
              <li>
                <t><tt>S[:pos) &lt;- S[:pos) ^ (Int2Bin(|A|/2 + |K|/32, 8) || A || K)</tt>.</t>
              </li>
            </ol>
          </section>
          <section anchor="the-absorb-command">
            <name>The <tt>absorb</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>X in {0, 1}^{8*}</tt> -- input data.</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t>None.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>commit(DATA)</tt>.</t>
              </li>
              <li>
                <t>Parse <tt>(X_1, ..., X_n) = Split(X, r)</tt>.</t>
              </li>
              <li>
                <t>For <tt>i = 1, 2, ..., n</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t><tt>pos &lt;- |X_i|</tt>;</t>
                  </li>
                  <li>
                    <t><tt>S[:pos) &lt;- S[:pos) ^ X_i</tt>.</t>
                  </li>
                  <li>
                    <t>if <tt>pos = r</tt>, then:
                    </t>
                    <ol spacing="normal" type="1"><li>
                        <t><tt>S &lt;- bash-f(S)</tt>;</t>
                      </li>
                      <li>
                        <t><tt>pos &lt;- 0</tt>.</t>
                      </li>
                    </ol>
                  </li>
                </ol>
              </li>
            </ol>
          </section>
          <section anchor="the-squeeze-command">
            <name>The <tt>squeeze</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>n &gt;= 0</tt> -- output length (multiple of <tt>8</tt>).</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t><tt>Y in {0, 1}^n</tt>.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>commit(OUT)</tt>.</t>
              </li>
              <li>
                <t><tt>Y &lt;- NIL</tt>.</t>
              </li>
              <li>
                <t>While <tt>|Y| + r &lt;= n</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t><tt>Y &lt;- Y || S[:r)</tt>;</t>
                  </li>
                  <li>
                    <t><tt>S &lt;- bash-f(S)</tt>.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t><tt>pos &lt;- n - |Y|</tt>.</t>
              </li>
              <li>
                <t><tt>Y &lt;- Y || S[:pos)</tt>.</t>
              </li>
              <li>
                <t>Return <tt>Y</tt>.</t>
              </li>
            </ol>
          </section>
          <section anchor="the-encrypt-command">
            <name>The <tt>encrypt</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>X in {0, 1}^{8*}</tt> -- plaintext.</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t><tt>Y in {0, 1}^|X|</tt> -- ciphertext.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>commit(TEXT)</tt>.</t>
              </li>
              <li>
                <t>Parse <tt>(X_1, ..., X_n) = Split(X, r)</tt>.</t>
              </li>
              <li>
                <t><tt>Y &lt;- NIL</tt>.</t>
              </li>
              <li>
                <t>For <tt>i = 1, 2, ..., n</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t><tt>pos &lt;- |X_i|</tt>;</t>
                  </li>
                  <li>
                    <t><tt>S[:pos) &lt;- S[:pos) ^ X_i</tt>;</t>
                  </li>
                  <li>
                    <t><tt>Y &lt;- Y || S[:pos)</tt>;</t>
                  </li>
                  <li>
                    <t>if <tt>pos = r</tt>, then:
                    </t>
                    <ol spacing="normal" type="1"><li>
                        <t><tt>S &lt;- bash-f(S)</tt>;</t>
                      </li>
                      <li>
                        <t><tt>pos &lt;- 0</tt>.</t>
                      </li>
                    </ol>
                  </li>
                </ol>
              </li>
              <li>
                <t>Return <tt>Y</tt>.</t>
              </li>
            </ol>
          </section>
          <section anchor="the-decrypt-command">
            <name>The <tt>decrypt</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t><tt>Y in {0, 1}^{8*}</tt> -- ciphertext.</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t><tt>X in {0, 1}^|Y|</tt> -- plaintext.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>commit(TEXT)</tt>.</t>
              </li>
              <li>
                <t>Parse <tt>(Y_1, ..., Y_n) = Split(Y, r)</tt>.</t>
              </li>
              <li>
                <t><tt>X &lt;- NIL</tt>.</t>
              </li>
              <li>
                <t>For <tt>i = 1, 2, ..., n</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t><tt>pos &lt;- |Y_i|</tt>;</t>
                  </li>
                  <li>
                    <t><tt>X &lt;- X || (S[:pos) ^ Y_i)</tt>;</t>
                  </li>
                  <li>
                    <t><tt>S[:pos) &lt;- Y_i</tt>;</t>
                  </li>
                  <li>
                    <t>if <tt>pos = r</tt>, then:
                    </t>
                    <ol spacing="normal" type="1"><li>
                        <t><tt>S &lt;- bash-f(S)</tt>;</t>
                      </li>
                      <li>
                        <t><tt>pos &lt;- 0</tt>.</t>
                      </li>
                    </ol>
                  </li>
                </ol>
              </li>
              <li>
                <t>Return <tt>X</tt>.</t>
              </li>
            </ol>
          </section>
          <section anchor="the-ratchet-command">
            <name>The <tt>ratchet</tt> Command</name>
            <t>Input:</t>
            <ul spacing="normal">
              <li>
                <t>None.</t>
              </li>
            </ul>
            <t>Output:</t>
            <ul spacing="normal">
              <li>
                <t>None.</t>
              </li>
            </ul>
            <t>Steps:</t>
            <ol spacing="normal" type="1"><li>
                <t><tt>T &lt;- S</tt>.</t>
              </li>
              <li>
                <t><tt>commit(NULL)</tt>.</t>
              </li>
              <li>
                <t><tt>S &lt;- S ^ T</tt>.</t>
              </li>
            </ol>
          </section>
        </section>
      </section>
      <section anchor="BASH.Hash">
        <name>Hashing</name>
        <t>Hashing is defined by the <tt>bash-hash</tt> algorithm that depends on the security
level <tt>l in {128, 192, 256}</tt>. The algorithms <tt>bashLLL</tt> are instances of
<tt>bash-hash</tt> at different security levels: <tt>bashLLL = bash-hash[l]</tt>, <tt>LLL = 2l</tt>.</t>
        <section anchor="the-bash-hash-algorithm">
          <name>The <tt>bash-hash</tt> Algorithm</name>
          <t>Parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>l in {128, 192, 256}</tt> -- security level.</t>
            </li>
          </ul>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^*</tt> -- data to be hashed.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>H in {0, 1}^{2l}</tt> -- the hash value.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Parse <tt>(X_1, X_2, ..., X_n) = Split(X || 01, 1536 - 4l)</tt>.</t>
            </li>
            <li>
              <t><tt>X_n &lt;- X_n || Rep(0, 1536 - 4l - |X_n|)</tt>.</t>
            </li>
            <li>
              <t><tt>S &lt;- Rep(0, 1472) || Int2Bin(l/4, {64}</tt>.</t>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ..., n</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>S[:1536-4l) &lt;- X_i</tt>;</t>
                </li>
                <li>
                  <t><tt>S &lt;- bash-f(S)</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>H &lt;- S[:2l)</tt>.</t>
            </li>
            <li>
              <t>Return <tt>H</tt>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="BASH.AE">
        <name>Authenticated Encryption</name>
        <t>Authenticated encryption is defined by the encryption algorithm
<tt>bash-prg-ae2561</tt> and the decryption algorithm <tt>bash-prg-ae2561-inv</tt>. Both
algorithms use an automaton denoted as <tt>alpha</tt>.</t>
        <section anchor="the-bash-prg-ae2561-algorithm">
          <name>The <tt>bash-prg-ae2561</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>A in {0, 1}^{32*}</tt> -- a preamble (<tt>|A| &lt;= 480</tt>);</t>
            </li>
            <li>
              <t><tt>X in {0, 1}^{8*}</tt> -- plaintext;</t>
            </li>
            <li>
              <t><tt>I in {0, 1}^{8*}</tt> -- associated data;</t>
            </li>
            <li>
              <t><tt>K in {0, 1}^{32*}</tt> -- a key (<tt>256 &lt;= |K| &lt;= 480</tt>).</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Y in {0, 1}^|X|</tt> -- the ciphertext;</t>
            </li>
            <li>
              <t><tt>T in {0, 1}^256</tt> -- the authentication tag.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>alpha.start[256, 1](A, K)</tt>.</t>
            </li>
            <li>
              <t>Process <tt>(X, I)</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>alpha.absorb(I)</tt>;</t>
                </li>
                <li>
                  <t><tt>Y &lt;- alpha.encrypt(X)</tt>;</t>
                </li>
                <li>
                  <t><tt>T &lt;- alpha.squeeze(l)</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <tt>(Y, T)</tt>.</t>
            </li>
          </ol>
          <aside>
            <t>Notes:</t>
            <ul spacing="normal">
              <li>
                <t>If <tt>I = NIL</tt>, step 2.1 may be skipped. If <tt>X = NIL</tt>, step 2.2 can be
simplified to <tt>Y &lt;- NIL</tt>. Skipped or simplified steps must be mirrored in
the decryption algorithm.</t>
              </li>
              <li>
                <t>After returning <tt>(Y, T)</tt>, the automaton may be used to process new <tt>(X, I)</tt>
pairs by repeating step 2. Before processing a new pair,
<tt>alpha.restart(A, K)</tt> may be called to update the preamble and/or the key.</t>
              </li>
              <li>
                <t>After processing <tt>(X, I)</tt>, <tt>alpha.ratchet(NIL)</tt> may be called to ensure
forward secrecy of <tt>X</tt> even after the state of <tt>alpha</tt> has been compromised.</t>
              </li>
            </ul>
          </aside>
        </section>
        <section anchor="the-bash-prg-ae2561-inv-algorithm">
          <name>The <tt>bash-prg-ae2561-inv</tt> Algorithm</name>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>A in {0, 1}^{32*}</tt> -- a preamble (<tt>|A| &lt;= 480</tt>);</t>
            </li>
            <li>
              <t><tt>Y in {0, 1}^{8*}</tt> -- ciphertext;</t>
            </li>
            <li>
              <t><tt>I in {0, 1}^{8*}</tt> -- associated data;</t>
            </li>
            <li>
              <t><tt>T in {0, 1}^256</tt> -- an authentication tag;</t>
            </li>
            <li>
              <t><tt>K in {0, 1}^{32*}</tt> -- a key (<tt>256 &lt;= |K| &lt;= 480</tt>).</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>NIL</tt> -- an authentication error, or <tt>X in {0, 1}^|Y|</tt> -- the decrypted
data.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>alpha.start[256, 1](A, K)</tt>.</t>
            </li>
            <li>
              <t>Process <tt>(Y, I, T)</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>alpha.absorb(I)</tt>;</t>
                </li>
                <li>
                  <t><tt>X &lt;- alpha.decrypt(Y)</tt>;</t>
                </li>
                <li>
                  <t>if <tt>T != alpha.squeeze(l)</tt>, then return <tt>NIL</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Return <tt>X</tt>.</t>
            </li>
          </ol>
          <aside>
            <t>Notes:</t>
            <ul spacing="normal">
              <li>
                <t>During decryption, the variable <tt>X</tt> stores the tentative plaintext until the
authentication tag is verified to be correct (step 2.3). If verification
fails, <tt>X</tt> must be securely erased.</t>
              </li>
              <li>
                <t>Extensions of the encryption algorithm described in the notes above are
mirrored in the decryption algorithm, with one exception: after <tt>NIL</tt> is
returned, processing of new triples <tt>(Y, I, T)</tt> must be stopped.</t>
              </li>
            </ul>
          </aside>
        </section>
      </section>
    </section>
    <section anchor="BIGN">
      <name>Bign Algorithms</name>
      <section anchor="BIGN.Prelim">
        <name>Preliminaries</name>
        <t>This specification defines the following algorithms of the Bign family:</t>
        <ul spacing="normal">
          <li>
            <t><tt>bign-genkeypair</tt> -- key pair generation;</t>
          </li>
          <li>
            <t><tt>bign-valpubkey</tt> -- public key validation;</t>
          </li>
          <li>
            <t><tt>bign-sign</tt> -- signature generation;</t>
          </li>
          <li>
            <t><tt>bign-vfy</tt> -- signature verification.</t>
          </li>
        </ul>
        <t>The first two algorithms implement key management, and the last two instantiate
the short Schnorr signature scheme <xref target="Sch91"/> over elliptic curves. Algorithms
operate at three security levels: <tt>l = 128</tt>, <tt>l = 192</tt> and <tt>l = 256</tt>. At level
<tt>l</tt>, the private key, public key and signature consist of <tt>l/4</tt>, <tt>l/2</tt> and
<tt>3l/8</tt> octets, respectively. The elliptic curves used in Bign satisfy the
requirements denoted as <tt>bign-curves</tt> (see <xref target="BIGN.Curves"/>). Three curves
recommended by <xref target="Stb45"/> are defined in <xref target="CURVES"/>.</t>
      </section>
      <section anchor="BIGN.Curves">
        <name>The <tt>bign-curves</tt> Elliptic Curves</name>
        <t>Bign algorithms use elliptic curves of the short Weierstrass form over
prime finite fields. A curve is described by the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>p</tt>: a prime that defines the field <tt>FF_p</tt>. Elements of <tt>FF_p</tt> are integers
of the set <tt>{0, 1, ..., p-1}</tt>, added and multiplied modulo <tt>p</tt>;</t>
          </li>
          <li>
            <t><tt>a, b in FF_p</tt>: coefficients of the equation <tt>E_{a,b}: y^2 = x^3 + a * x + b</tt>
defining the curve and the set <tt>E_{a,b}(FF_p)</tt> of its <tt>FF_p</tt>-rational
points. The set <tt>E_{a,b}(FF_p)</tt> consists of pairs <tt>(x, y)</tt>, <tt>x, y in FF_p</tt>,
satisfying <tt>E_{a,b}</tt> (affine points) and the point at infinity <tt>O</tt>.</t>
          </li>
        </ul>
        <t>Points of <tt>E_{a,b}(FF_p)</tt> are added via the chord-and-tangent rule <xref target="HMV04"/>,
turning <tt>E_{a,b}(FF_p)</tt> into an Abelian group with zero element <tt>O</tt>.</t>
        <t>Elliptic curve parameters also describe an affine point
<tt>G in E_{a,b}(FF_p)</tt> with a zero <tt>x</tt>-coordinate:</t>
        <ul spacing="normal">
          <li>
            <t><tt>y_G in FF_p</tt>: <tt>y</tt>-coordinate of <tt>G</tt>;</t>
          </li>
          <li>
            <t><tt>q</tt>: the order of <tt>G</tt> in the group <tt>E_{a,b}(FF_p)</tt>.</t>
          </li>
        </ul>
        <t>The point <tt>G</tt> generates a group <tt>GG_q</tt> of order <tt>q</tt>. It consists of points <tt>G</tt>,
<tt>2 G = G + G</tt>, <tt>3 G = 2 G + G</tt>, ..., <tt>(q-1) G</tt> and <tt>q G = O</tt>. In Bign, <tt>GG_q</tt>
always coincides with the entire group <tt>E_{a,b}(FF_p)</tt>.</t>
        <t>The parameters <tt>(p, a, b, y_G, q)</tt> are passed to all Bign algorithms. The
parameters must satisfy general constraints to ensure a well-defined elliptic
curve group, alongside additional requirements for security and efficiency.</t>
        <t>The full list of requirements, called <tt>bign-curves</tt>, is as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>At security level <tt>l in {128, 192, 256}</tt>: <tt>2^{2l-1} &lt; p, q &lt; 2^{2l}</tt>.</t>
          </li>
          <li>
            <t><tt>p</tt> and <tt>q</tt> are primes.</t>
          </li>
          <li>
            <t><tt>p != q</tt>.</t>
          </li>
          <li>
            <t><tt>p mod 4 = 3</tt>.</t>
          </li>
          <li>
            <t><tt>p^m mod q != 1</tt> for <tt>m = 1, 2, ..., 50</tt>.</t>
          </li>
          <li>
            <t><tt>0 &lt; a, b &lt; p</tt>.</t>
          </li>
          <li>
            <t><tt>b = Bin2Int(belt-hash(t || seed) || belt-hash(t || seed1)) mod p</tt>, where:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>t = Int2Bin(p, 2l) || Int2Bin(a, 2l)</tt>;</t>
              </li>
              <li>
                <t><tt>seed in {0, 1}^64</tt> is an initialization parameter for the curve
generation algorithm;</t>
              </li>
              <li>
                <t><tt>seed1 = Int2Bin(Bin2Int(seed) + 1, 64)</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>b^{(p-1)/2} mod p = 1</tt>, i.e., <tt>b</tt> is a quadratic residue modulo <tt>p</tt>.</t>
          </li>
          <li>
            <t><tt>(4 a^3 + 27 b^2) mod p != 0</tt>.</t>
          </li>
          <li>
            <t><tt>G = (0, y_G)</tt>, where <tt>y_G = b^{(p+1)/4} mod p</tt>.</t>
          </li>
          <li>
            <t><tt>q G = O</tt>.</t>
          </li>
          <li>
            <t><tt>p - q &lt; 2^{l+1}</tt>.</t>
          </li>
        </ol>
        <t>Let <tt>GG_q^*</tt> be the set of affine (nonzero) points of <tt>GG_q</tt>. Points of
<tt>GG_q^*</tt> are encoded as follows.</t>
        <dl>
          <dt><tt>Point2Bin(P, m)</tt>:</dt>
          <dd>
            <t>for <tt>P = (x, y) in GG_q^*</tt> and positive integer <tt>m &lt;= 4l</tt>, the string
<tt>(Int2Bin(x, 2l) || Int2Bin(y, 2l))[:m)</tt>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="key-management">
        <name>Key Management</name>
        <t>Algorithms of the Bign family use private keys <tt>d in {1, 2, ..., q-1}</tt> and
public keys <tt>Q in GG_q^*</tt>. The <tt>bign-genkeypair</tt> algorithm generates a key pair
<tt>(d, Q)</tt>, the <tt>bign-valpubkey</tt> algorithm validates <tt>Q</tt>.</t>
        <t>If necessary, keys are encoded as binary strings <tt>Int2Bin(d, 2l)</tt> and
<tt>Point2Bin(Q, 4l)</tt>.</t>
        <section anchor="the-bign-genkeypair-algorithm">
          <name>The <tt>bign-genkeypair</tt> Algorithm</name>
          <t>Parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>(p, a, b, q, y_G)</tt> -- elliptic curve parameters that describe the group
<tt>GG_q</tt> and its generator <tt>G</tt>.</t>
            </li>
          </ul>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t>None.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>d in {1, 2, ..., q-1}</tt> -- a private key;</t>
            </li>
            <li>
              <t><tt>Q in GG_q^*</tt> -- the corresponding public key.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>d &lt;- {1, 2, ..., q-1}</tt>.</t>
            </li>
            <li>
              <t><tt>Q &lt;- d G</tt>.</t>
            </li>
            <li>
              <t>Return <tt>(d, Q)</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-bign-valpubkey-algorithm">
          <name>The <tt>bign-valpubkey</tt> Algorithm</name>
          <t>Parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>(p, a, b, q, y_G)</tt> -- elliptic curve parameters.</t>
            </li>
          </ul>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Q = (x_Q, y_Q)</tt> -- a public key.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>1</tt> if <tt>Q</tt> is valid, and <tt>0</tt> otherwise.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>If either condition:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>0 &lt;= x_Q, y_Q &lt; p</tt>;</t>
                </li>
                <li>
                  <t><tt>y_Q^2 mod p = (x_Q^3 + a * x_Q + b) mod p</tt>;</t>
                </li>
              </ul>
              <t>
is violated, then return <tt>0</tt>.</t>
            </li>
            <li>
              <t>Return <tt>1</tt>.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="digital-signatures">
        <name>Digital Signatures</name>
        <t>Digital signature algorithms are <tt>bign-sign</tt> and <tt>bign-vfy</tt>.
The <tt>bign-sign</tt> algorithm signs messages using a private key <tt>d</tt>,
and <tt>bign-vfy</tt> verifies signatures using the corresponding public key <tt>Q</tt>.</t>
        <t>A message <tt>X</tt> to be signed is preprocessed by a hash algorithm <tt>h</tt> that produces
<tt>2l</tt>-bit hash value <tt>H = h(X)</tt>. To distinguish between different hash
algorithms, <tt>H</tt> is used along with a string <tt>OID(h)</tt> that uniquely identifies
<tt>h</tt>. This is the DER encoding of the ASN.1 object identifier for <tt>h</tt>.</t>
        <t>During the signing process, an ephemeral key pair is generated. This can be
done either in probabilistic mode, using <tt>bign-genkeypair</tt>, or in deterministic
mode, by using <tt>H</tt> and <tt>d</tt>.</t>
        <t>The deterministic mode of <tt>bign-sign</tt> is implemented using the auxiliary
<tt>bign-genk</tt> algorithm.</t>
        <section anchor="the-bign-genk-algorithm">
          <name>The <tt>bign-genk</tt> Algorithm</name>
          <t>Parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>(p, a, b, y_G, q)</tt> -- elliptic curve parameters;</t>
            </li>
            <li>
              <t><tt>OID(h)</tt> -- an identifier of a hash algorithm <tt>h</tt>.</t>
            </li>
          </ul>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>d in {1, 2, ..., q-1}</tt> -- a private key;</t>
            </li>
            <li>
              <t><tt>H in {0, 1}^{2l}</tt> -- a hash value.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>k in {1, 2, ..., q-1}</tt> -- an ephemeral private key.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Pick an arbitrary <tt>t in {0, 1}^*</tt> (<tt>t</tt> can be the empty string).</t>
            </li>
            <li>
              <t><tt>K &lt;- belt-hash(OID(h) || Int2Bin(d, 2l) || t)</tt>.</t>
            </li>
            <li>
              <t><tt>r &lt;- H</tt>.</t>
            </li>
            <li>
              <t>Parse <tt>(r_1, r_2, ..., r_n) = Split(r, 128)</tt>.</t>
            </li>
            <li>
              <t>For <tt>i = 1, 2, ...</tt>:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>if <tt>n = 2</tt>, then:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t><tt>s &lt;- r_1</tt>;</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>if <tt>n = 3</tt>, then:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t><tt>s &lt;- r_1 ^ r_2</tt>;</t>
                    </li>
                    <li>
                      <t><tt>r_1 &lt;- r_2</tt>;</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>if <tt>n = 4</tt>, then:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t><tt>s &lt;- r_1 ^ r_2 ^ r_3</tt>;</t>
                    </li>
                    <li>
                      <t><tt>r_1 &lt;- r_2</tt>;</t>
                    </li>
                    <li>
                      <t><tt>r_2 &lt;- r_3</tt>;</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t><tt>r_{n-1} &lt;- belt-block(s, K) ^ r_n ^ Int2Bin(i, 128)</tt>;</t>
                </li>
                <li>
                  <t><tt>r_n &lt;- s</tt>;</t>
                </li>
                <li>
                  <t><tt>r &lt;- r_1 || r_2 || ... || r_n</tt>;</t>
                </li>
                <li>
                  <t>if <tt>i mod 2n = 0</tt> and <tt>Bin2Int(r) in {1, 2, ..., q-1}</tt>, break.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>k &lt;- Bin2Int(r)</tt>.</t>
            </li>
            <li>
              <t>Return <tt>k</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-bign-sign-algorithm">
          <name>The <tt>bign-sign</tt> Algorithm</name>
          <t>Parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>(p, a, b, y_G, q)</tt> -- elliptic curve parameters that describe the security
level <tt>l</tt>, the group <tt>GG_q</tt> and its generator <tt>G</tt>;</t>
            </li>
            <li>
              <t><tt>h</tt> -- a hash algorithm with the identifier <tt>OID(h)</tt>.</t>
            </li>
          </ul>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^*</tt> -- a message to be signed;</t>
            </li>
            <li>
              <t><tt>d in {1, 2, ..., q-1}</tt> -- a private key.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>S in {0, 1}^{3l}</tt> -- the signature.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>H &lt;- h(X)</tt>.</t>
            </li>
            <li>
              <t>If the signing mode is probabilistic, then:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>(k, R) &lt;- bign-genkeypair()</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Else, if the signing mode is deterministic, then:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t><tt>k &lt;- bign-genk(d, H)</tt>;</t>
                </li>
                <li>
                  <t><tt>R &lt;- k G</tt>.</t>
                </li>
              </ol>
            </li>
            <li>
              <t><tt>S_0 &lt;- belt-hash(OID(h) || Point2Bin(R, 2l) || H)[:l)</tt>.</t>
            </li>
            <li>
              <t><tt>S_1 &lt;- Int2Bin((k - Bin2Int(H) - (Bin2Int(S_0) + 2^l)d)) mod q, 2l)</tt>.</t>
            </li>
            <li>
              <t><tt>S &lt;- S_0 || S_1</tt>.</t>
            </li>
            <li>
              <t>Return <tt>S</tt>.</t>
            </li>
          </ol>
        </section>
        <section anchor="the-bign-vfy-algorithm">
          <name>The <tt>bign-vfy</tt> Algorithm</name>
          <t>Parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>(p, a, b, y_G, q)</tt> -- elliptic curve parameters that describe the security
level <tt>l</tt>, the group <tt>GG_q</tt> and its generator <tt>G</tt>;</t>
            </li>
            <li>
              <t><tt>h</tt> -- a hash algorithm with the identifier <tt>OID(h)</tt>.</t>
            </li>
          </ul>
          <t>Input:</t>
          <ul spacing="normal">
            <li>
              <t><tt>X in {0, 1}^*</tt> -- a signed message;</t>
            </li>
            <li>
              <t><tt>S in {0, 1}^*</tt> -- a signature;</t>
            </li>
            <li>
              <t><tt>Q in GG_q^*</tt> -- a public key.</t>
            </li>
          </ul>
          <t>Output:</t>
          <ul spacing="normal">
            <li>
              <t><tt>1</tt>, if the signature is valid, and <tt>0</tt> otherwise.</t>
            </li>
          </ul>
          <t>Steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>|S| != 3l</tt>, then return <tt>0</tt>.</t>
            </li>
            <li>
              <t>Parse <tt>S = S_0 || S_1</tt>, where <tt>|S_0| = l</tt> and <tt>|S_1| = 2l</tt>.</t>
            </li>
            <li>
              <t>If <tt>Bin2Int(S_1) &gt;= q</tt>, then return <tt>0</tt>.</t>
            </li>
            <li>
              <t><tt>H &lt;- h(X)</tt>.</t>
            </li>
            <li>
              <t><tt>R &lt;- ((Bin2Int(S_1) + Bin2Int(H)) mod q)G + (Bin2Int(S_0) + 2^l)Q</tt>.</t>
            </li>
            <li>
              <t>If <tt>R = O</tt>, then return <tt>0</tt>.</t>
            </li>
            <li>
              <t><tt>t &lt;- belt-hash(OID(h) || Point2Bin(R, 2l) || H)[:l)</tt>.</t>
            </li>
            <li>
              <t>If <tt>S_0 != t</tt>, then return <tt>0</tt>.</t>
            </li>
            <li>
              <t>Return <tt>1</tt>.</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="BTLS">
      <name>Cryptographic Parameters for TLS</name>
      <section anchor="cipher-suites">
        <name>Cipher Suites</name>
        <t>This specification defines the following cipher suites for TLS 1.3 <xref target="Stb90"/>.</t>
        <table anchor="SUITES">
          <name>STB Cipher Suites</name>
          <thead>
            <tr>
              <th align="left">Cipher Suite</th>
              <th align="left">Value (TBU)</th>
              <th align="left">AEAD</th>
              <th align="left">Hash</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>TLS_BELT_CHE256_BELT_HASH</tt></td>
              <td align="left">
                <tt>{0xFF, 0x1D}</tt></td>
              <td align="left">
                <tt>belt-che256</tt></td>
              <td align="left">
                <tt>belt-hash</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>TLS_BASH_PRG_AE2561_BASH256</tt></td>
              <td align="left">
                <tt>{0xFF, 0x1E}</tt></td>
              <td align="left">
                <tt>bash-prg-ae2561</tt></td>
              <td align="left">
                <tt>bash256</tt></td>
            </tr>
          </tbody>
        </table>
        <t>Supporting the <tt>TLS_BASH_PRG_AE2561_BASH256</tt> cipher suite is mandated by this
specification. Implementation of <tt>TLS_BELT_CHE256_BELT_HASH</tt> is optional.</t>
        <t>Both cipher suites assign <tt>key_length = 32</tt> and <tt>iv_length = 16</tt> (see
<xref target="RFC9846"/>, Section 7.3).</t>
        <t>In the TLS record protocol, associated data for authenticated encryption
is composed of the <tt>opaque_type</tt>, <tt>legacy_record_version</tt> and <tt>length</tt> fields
of the <tt>TLSCiphertext</tt> structure, 5 bytes in total.</t>
        <t>When <tt>bash-prg-ae2561</tt> is used, the associated data <tt>I in {0, 1}^40</tt> is
combined with the nonce <tt>S in {0, 1}^128</tt> to form the preamble <tt>A</tt>:
<tt>A &lt;- S || I || Rep(0, 24)</tt>. Step 2.1 (<tt>alpha.absorb(I)</tt>) is skipped during both
encryption and decryption.</t>
        <t>In the <tt>belt-che256</tt> and <tt>bash-prg-ae2561</tt> algorithms, authentication tags are 8
and 32 bytes long, respectively. An authentication tag <tt>T</tt> is appended to a
ciphertext <tt>Y</tt>, producing the authenticated ciphertext <tt>Y || T</tt> saved to
<tt>TLSCiphertext.encrypted_record</tt>.</t>
        <t>A <tt>belt-che256</tt> key must be updated after processing <tt>2^32</tt> TLS records.
There are no usage limits for <tt>bash-prg-ae2561</tt> keys.</t>
      </section>
      <section anchor="the-diffie-hellman-protocol">
        <name>The Diffie-Hellman Protocol</name>
        <t>The Diffie-Hellman protocol is instantiated as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>The base cyclic group is a group of elliptic curve points that
satisfies the <tt>bign-curves</tt> requirements (see <xref target="BIGN.Curves"/>).</t>
          </li>
          <li>
            <t>Ephemeral private and public keys are generated using the
<tt>bign-genkeypair</tt> algorithm.</t>
          </li>
          <li>
            <t>Parties validate each other’s public keys using the
<tt>bign-valpubkey</tt> algorithm.</t>
          </li>
          <li>
            <t>Parties compute the shared secret <tt>K</tt> as follows: <tt>K = uV</tt>, where <tt>u</tt> is the
ephemeral private key (scalar), <tt>V</tt> is the ephemeral public key of the
opposite party (point on the curve). Curve operations are defined in <xref target="BIGN"/>.</t>
          </li>
          <li>
            <t>The shared secret <tt>K</tt>, an affine point of the elliptic curve, is encoded as
<tt>Point2Bin(K, 4l)</tt> (see <xref target="BIGN.Curves"/>), where <tt>l</tt> is the security level.</t>
          </li>
        </ol>
      </section>
      <section anchor="elliptic-curves">
        <name>Elliptic Curves</name>
        <t>The Diffie-Hellman protocol uses the elliptic curves <tt>bign-curve256v1</tt>,
<tt>bign-curve384v1</tt> and <tt>bign-curve512v1</tt> defined in <xref target="CURVES"/>.</t>
        <t>The group identifiers are added to the <tt>NamedGroup</tt> enumeration (see
<xref target="RFC9846"/>, Section 4.3.7):</t>
        <artwork><![CDATA[
   enum {
     ...
     bign_curve256v1(0xFE01), /* TBU */
     bign_curve384v1(0xFE02), /* TBU */
     bign_curve512v1(0xFE03)  /* TBU */
     ...
   } NamedGroup;
]]></artwork>
        <t>The identifiers are used in the <tt>supported_groups</tt> and <tt>key_share</tt>
extensions.</t>
      </section>
      <section anchor="digital-signature-algorithms">
        <name>Digital Signature Algorithms</name>
        <t>Bign digital signature generation and verification algorithms are instantiated
with three combinations of elliptic curve parameters and hash algorithms for
message preprocessing. These are the resulting compound algorithms.</t>
        <table anchor="DSALGS">
          <name>Digital Signature Algorithms</name>
          <thead>
            <tr>
              <th align="left">Compound Algorithm</th>
              <th align="left">Elliptic Curve</th>
              <th align="left">Hash Algorithm</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>bign-with-hbelt</tt></td>
              <td align="left">
                <tt>bign-curve256v1</tt></td>
              <td align="left">
                <tt>belt-hash</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>bign-with-bash384</tt></td>
              <td align="left">
                <tt>bign-curve384v1</tt></td>
              <td align="left">
                <tt>bash384</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>bign-with-bash512</tt></td>
              <td align="left">
                <tt>bign-curve512v1</tt></td>
              <td align="left">
                <tt>bash512</tt></td>
            </tr>
          </tbody>
        </table>
        <t>The digital signature algorithm identifiers are added to the <tt>SignatureScheme</tt>
enumeration (see <xref target="RFC9846"/>, Section 4.3.3):</t>
        <artwork><![CDATA[
   enum {
     ...
     bign_with_hbelt(0xFE01),     /* TBU */
     bign_with_bash384(0xFE02),   /* TBU */
     bign_with_bash512(0xFE03)    /* TBU */
     ...
   } SignatureScheme;
]]></artwork>
        <t>The identifiers are used in the <tt>signature_algorithms</tt> and
<tt>signature_algorithms_cert</tt> extensions.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This specification requests/registers the following entries to the “TLS Cipher
Suites” registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value (TBU)</th>
            <th align="left">Description</th>
            <th align="left">DTLS-OK</th>
            <th align="left">Recommended</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>0xFF, 0x1D</tt></td>
            <td align="left">
              <tt>TLS_BELT_CHE256_BELT_HASH</tt></td>
            <td align="left">N</td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">
              <tt>0xFF, 0x1E</tt></td>
            <td align="left">
              <tt>TLS_BASH_PRG_AE2561_BASH256</tt></td>
            <td align="left">N</td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>This specification requests/registers the following entries to the “TLS
Supported Groups” registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value (TBU)</th>
            <th align="left">Description</th>
            <th align="left">DTLS-OK</th>
            <th align="left">Recommended</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>0xFE01</tt></td>
            <td align="left">
              <tt>bign-curve256v1</tt></td>
            <td align="left">N</td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">
              <tt>0xFE02</tt></td>
            <td align="left">
              <tt>bign-curve384v1</tt></td>
            <td align="left">N</td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">
              <tt>0xFE03</tt></td>
            <td align="left">
              <tt>bign-curve512v1</tt></td>
            <td align="left">N</td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>This specification requests/registers the following entries to the “TLS
SignatureScheme” registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value (TBU)</th>
            <th align="left">Description</th>
            <th align="left">Recommended</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>0xFE01</tt></td>
            <td align="left">
              <tt>bign-with-hbelt</tt></td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">
              <tt>0xFE02</tt></td>
            <td align="left">
              <tt>bign-with-bash384</tt></td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">
              <tt>0xFE03</tt></td>
            <td align="left">
              <tt>bign-with-bash512</tt></td>
            <td align="left">N</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <aside>
        <t>Note: The listed values are placeholders selected from the IANA private-use
ranges. They are intended for temporary use in pre-IANA-assignment
implementations of <xref target="Stb90"/>. “TBU” indicates that these placeholders will be
replaced by new IANA-assigned values.</t>
      </aside>
    </section>
    <section anchor="SEC">
      <name>Security Considerations</name>
      <t>The security of TLS 1.3 with STB cryptographic parameters depends on the
the underlying algorithms.</t>
      <t>The security-driven design rationale of the <tt>belt-block</tt> and
<tt>bash-f</tt> algorithms, the core primitives of the Belt and Bash families,
is provided in <xref target="AGMK02"/> and <xref target="AMMS17"/>.</t>
      <t>Security analysis of <tt>belt-hash</tt> in <xref target="Agi26"/> shows that under an idealized
internal compression function, the collision attack requires approximately
<tt>2^{128}</tt> operations, and the preimage and second-preimage attacks require at
least <tt>2^{192}</tt> operations. Both complexities are achievable, although the
latter holds only if the resulting preimages are relatively long and of a
weakly controlled format. Thus, while the collision security of <tt>belt-hash</tt>
matches that of an ideal (random) 256-bit hash function, its preimage security
is lower. However, structural constraints on preimages prevent this lower
security bound from being exploited in TLS 1.3. In particular, the Bign digital
signature that uses <tt>belt-hash</tt> for internal hashing is potentially affected at
the security level <tt>l = 256</tt>, where inverting <tt>belt-hash</tt> in under <tt>2^{256}</tt>
operations could accelerate signature forgery. But since the forgery attack
requires the preimage to be a short string with a highly restricted format,
the attack becomes infeasible.</t>
      <t>The security of <tt>belt-che256</tt> is analyzed in <xref target="Agi20"/>. The security guarantees
established in that analysis are justified provided that the total number of
128-bit blocks processed by the underlying <tt>belt-block</tt> cipher is significantly
less than <tt>2^{64}</tt>. This constraint is directly addressed in the definition of
the <tt>TLS_BELT_CHE256_BELT_HASH</tt> ciphersuite, which requires rekeying
<tt>belt-che256</tt> after processing <tt>2^{32}</tt> TLS records.</t>
      <t>The <tt>bash256</tt> algorithm follows an overwrite mode of sponge-based hash
functions <xref target="BDPV11"/>. In this mode, security guarantees of <tt>bash256</tt>-based
HMAC--and, in turn, HKDF--can be justified using the approach of <xref target="Bel06"/>,
where the underlying <tt>bash-f</tt> algorithm is treated as a classical compression
function, or directly within the framework of sponge-based cryptography
(see Section 5.1.3 of <xref target="BDPV11a"/>).</t>
      <t>The security of the Bign signature algorithms, which instantiate the short
Schnorr signature, is justified, for example, in <xref target="BloLee19"/>. The
deterministic mode of <tt>bign-sign</tt> avoids drawbacks of the usual
probabilistic mode, where the weaknesses of RNG / PRNG can yield reuse of
ephemeral keys and thus compromise the private key. We recommend using the
deterministic mode with a randomly generated <tt>t</tt>, the deterministic mode with a
fixed <tt>t</tt>, and the probabilistic mode, in this order of preference.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="AgiAfo05" target="https://eprint.iacr.org/2004/024">
          <front>
            <title>Exponential S-boxes</title>
            <author initials="S." surname="Agievich" fullname="Sergey Agievich">
              <organization>Belarusian State University</organization>
            </author>
            <author initials="A." surname="Afonenko" fullname="Andrey Afonenko">
              <organization>Belarusian State University</organization>
            </author>
            <date year="2005"/>
          </front>
          <seriesInfo name="Vesti NAN Belarusi" value="1, pp. 106-112"/>
        </reference>
        <reference anchor="AGMK02" target="https://arxiv.org/abs/2610.31178">
          <front>
            <title>BelT Block Cipher</title>
            <author initials="S." surname="Agievich" fullname="Sergey Agievich">
              <organization>Belarusian State University</organization>
            </author>
            <author initials="V." surname="Galinskij" fullname="Victor Galinskij">
              <organization>Belarusian State University</organization>
            </author>
            <author initials="N." surname="Mikulich" fullname="Nikolai Mikulich">
              <organization>National Center of Information Security of Belarus</organization>
            </author>
            <author initials="" surname="Yu Kharin" fullname="Yuriy Kharin">
              <organization>Belarusian State University</organization>
            </author>
            <date year="2002"/>
          </front>
          <seriesInfo name="Upravlenie Zashhhitoj Informacii" value="6(4), pp. 407-412 (In Russian)"/>
        </reference>
        <reference anchor="Agi20" target="https://eprint.iacr.org/2020/331">
          <front>
            <title>The Counter mode with encrypted nonces and its extension to AE</title>
            <author initials="S." surname="Agievich" fullname="Sergey Agievich">
              <organization>Belarusian State University</organization>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="Mat. Vopr. Kriptogr." value="11(2), pp. 7-24"/>
        </reference>
        <reference anchor="Agi26">
          <front>
            <title>On the security of belt-hash and belt-compress</title>
            <author initials="S." surname="Agievich" fullname="Sergey Agievich">
              <organization>Belarusian State University</organization>
            </author>
            <date year="2026"/>
          </front>
          <refcontent>Pre-proceedings of the 15th Workshop on Current Trends in Cryptology (CTCrypt’2026), pp. 445-470</refcontent>
        </reference>
        <reference anchor="AMMS17" target="https://eprint.iacr.org/2016/587">
          <front>
            <title>Bash-f: another LRX sponge function</title>
            <author initials="S." surname="Agievich" fullname="Sergey Agievich">
              <organization>Belarusian State University</organization>
            </author>
            <author initials="V." surname="Marchuk" fullname="Vadim Marchuk">
              <organization>Belarusian State University</organization>
            </author>
            <author initials="A." surname="Maslau" fullname="Alexander Maslau">
              <organization>Belarusian State University</organization>
            </author>
            <author initials="V." surname="Semenov" fullname="Vladislav Semenov">
              <organization>Belarusian State University</organization>
            </author>
            <date year="2017"/>
          </front>
          <seriesInfo name="Mat. Vopr. Kriptogr." value="8(2), pp. 7-28"/>
        </reference>
        <reference anchor="Bel06" target="https://eprint.iacr.org/2006/043">
          <front>
            <title>New Proofs for NMAC and HMAC: Security Without Collision-Resistance</title>
            <author initials="M." surname="Bellare" fullname="Mihir Bellare">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="BDPV11" target="https://keccak.team/files/CSF-0.1.pdf">
          <front>
            <title>Cryptographic sponge functions</title>
            <author initials="G." surname="Bertoni" fullname="Guido Bertoni">
              <organization/>
            </author>
            <author initials="J." surname="Daemen" fullname="Joan Daemen">
              <organization/>
            </author>
            <author initials="M." surname="Peters" fullname="Michael Peters">
              <organization/>
            </author>
            <author initials="G." surname="Van Assche" fullname="Gilles Van Assche">
              <organization/>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="BDPV11a" target="https://keccak.team/files/Keccak-submission-3.pdf">
          <front>
            <title>The Keccak SHA-3 submission</title>
            <author initials="G." surname="Bertoni" fullname="Guido Bertoni">
              <organization/>
            </author>
            <author initials="J." surname="Daemen" fullname="Joan Daemen">
              <organization/>
            </author>
            <author initials="M." surname="Peters" fullname="Michael Peters">
              <organization/>
            </author>
            <author initials="G." surname="Van Assche" fullname="Gilles Van Assche">
              <organization/>
            </author>
            <date year="2011"/>
          </front>
          <refcontent>Submission to NIST (Round 3)</refcontent>
        </reference>
        <reference anchor="BloLee19" target="https://eprint.iacr.org/2019/1105">
          <front>
            <title>On the Multi-user Security of Short Schnorr Signatures with Preprocessing</title>
            <author initials="J." surname="Blocki" fullname="Jeremiah Blocki">
              <organization/>
            </author>
            <author initials="S." surname="Lee" fullname="Seunghoon Lee">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <refcontent>Proceedings of EUROCRYPT 2022, pp. 614-643</refcontent>
        </reference>
        <reference anchor="Che10">
          <front>
            <title>Discrete Logarithm Problems with Auxiliary Inputs</title>
            <author initials="J. H." surname="Cheon" fullname="Jung Hee Cheon">
              <organization/>
            </author>
            <date year="2010"/>
          </front>
          <seriesInfo name="J. Cryptology" value="vol. 23, pp. 457-476"/>
        </reference>
        <reference anchor="HMV04">
          <front>
            <title>Guide to Elliptic Curve Cryptography</title>
            <author initials="D." surname="Hankerson" fullname="Darrel Hankerson">
              <organization/>
            </author>
            <author initials="A." surname="Menezes" fullname="Alfred Menezes">
              <organization/>
            </author>
            <author initials="S." surname="Vanstone" fullname="Scott Vanstone">
              <organization/>
            </author>
            <date year="2004"/>
          </front>
          <refcontent>New York: Springer</refcontent>
        </reference>
        <reference anchor="LidNie97">
          <front>
            <title>Finite Fields</title>
            <author initials="R." surname="Lidl" fullname="Rudolf Lidl">
              <organization/>
            </author>
            <author initials="H." surname="Niederreiter" fullname="Harald Niederreiter">
              <organization/>
            </author>
            <date year="1997"/>
          </front>
          <refcontent>Cambridge University Press</refcontent>
        </reference>
        <reference anchor="McGVie04" target="https://eprint.iacr.org/2004/193">
          <front>
            <title>The security and performance of the Galois/Counter Mode (GCM) of operation</title>
            <author initials="D. A." surname="McGrew" fullname="David McGrew">
              <organization/>
            </author>
            <author initials="J." surname="Viega" fullname="John Viega">
              <organization/>
            </author>
            <date year="2004"/>
          </front>
          <refcontent>INDOCRYPT 2004</refcontent>
        </reference>
        <reference anchor="Sch91">
          <front>
            <title>Efficient Signature Generation by Smart Cards</title>
            <author initials="C. P." surname="Schnorr" fullname="Claus P. Schnorr">
              <organization/>
            </author>
            <date year="1991"/>
          </front>
          <seriesInfo name="J. Cryptology" value="4(3), pp. 161-174"/>
        </reference>
        <reference anchor="Stb31">
          <front>
            <title>STB 34.101.31-2020. Information technology and security. Encryption and integrity control algorithms</title>
            <author initials="" surname="The State Committee for Standardization of the Republic of Belarus">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Stb45">
          <front>
            <title>STB 34.101.45-2013. Information technology and security. Digital signature and key transport algorithms based on elliptic curves</title>
            <author initials="" surname="The State Committee for Standardization of the Republic of Belarus">
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="Stb77">
          <front>
            <title>STB 34.101.77-2020. Information technology and security. Sponge-bases cryptographic algorithms</title>
            <author initials="" surname="The State Committee for Standardization of the Republic of Belarus">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Stb90">
          <front>
            <title>STB 34.101.90-2026. Information technology and security. The Transport Layer Security Protocol Version 1.3</title>
            <author initials="" surname="The State Committee for Standardization of the Republic of Belarus">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1651?>

<section anchor="CURVES">
      <name>Recommended Elliptic Curves</name>
      <t>The following elliptic curves are recommended for the Bign family:</t>
      <ul spacing="normal">
        <li>
          <t><tt>bign-curve256v1</tt> -- a curve at the security level <tt>l = 128</tt>;</t>
        </li>
        <li>
          <t><tt>bign-curve384v1</tt> -- a curve at the security level <tt>l = 192</tt>;</t>
        </li>
        <li>
          <t><tt>bign-curve512v1</tt> -- a curve at the security level <tt>l = 256</tt>.</t>
        </li>
      </ul>
      <t>The recommended curves satisfy the <tt>bign-curves</tt> requirements 1 -- 12
and the following additional requirements:</t>
      <ol spacing="normal" type="1"><li>
          <t><tt>p</tt> is the largest suitable prime that does not exceed <tt>2^{2l}</tt>.</t>
        </li>
        <li>
          <t><tt>a = p - 3</tt>.</t>
        </li>
        <li>
          <t>The numbers <tt>q-1</tt> and <tt>q+1</tt> both have large prime factors.</t>
        </li>
      </ol>
      <t>Requirements 13 and 14 speed up reduction modulo <tt>p</tt> and point doubling.
Requirement 15 provides protection against Cheon’s attack <xref target="Che10"/>. This
attack is not directly applicable to the Bign algorithms; the purpose of the
requirement is to mitigate risks of using the recommended curves outside of
Bign.</t>
      <t>For each security level, the recommended curve was generated as follows:</t>
      <ul spacing="normal">
        <li>
          <t>50 curves satisfying the requirements 1 -- 13 were constructed from the
smallest possible <tt>Bin2Int(seed)</tt> values, starting at <tt>0</tt>;</t>
        </li>
        <li>
          <t>among these curves, the one that yields the maximum of <tt>min(gpf(q-1),
gpf(q+1))</tt> was chosen.</t>
        </li>
      </ul>
      <t>Here <tt>gpf(n)</tt> denotes the greatest prime factor of <tt>n</tt>.</t>
      <t>The recommended curves are defined below by parameters <tt>(p, a, b, y_G, q)</tt>.
Seeds used to construct the curves and factorizations of <tt>q-1</tt> and <tt>q+1</tt> are
also given. Large prime divisors are denoted by <tt>r_m</tt>, where <tt>m</tt> is the
divisor’s bit length.</t>
      <section anchor="the-bign-curve256v1-curve">
        <name>The <tt>bign-curve256v1</tt> Curve</name>
        <t>Parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>p = 2^256 - 189</tt>;</t>
          </li>
          <li>
            <t><tt>a = p - 3</tt>;</t>
          </li>
          <li>
            <t><tt>b = 5418994543382917476470141667052323987242043847840803114498787\</tt>
              <tt>1676190519198705</tt>;</t>
          </li>
          <li>
            <t><tt>y_G = 48835626907528736105417095645674365354469331933013114027389\</tt>
              <tt>791773001019124371</tt>;</t>
          </li>
          <li>
            <t><tt>q = 2^256 - 51359303463308904523350978545619999225</tt>.</t>
          </li>
        </ul>
        <t>Additional details:</t>
        <ul spacing="normal">
          <li>
            <t><tt>seed = 0x5E38010000000000</tt>;</t>
          </li>
          <li>
            <t><tt>q - 1 = 2 * 3 * 5 * 59 * 2707 * 8287 * r_{221}</tt>;</t>
          </li>
          <li>
            <t><tt>q + 1 = 2^3 * 7 * 449 * 31327 * r_{227}</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-bign-curve384v1-curve">
        <name>The <tt>bign-curve384v1</tt> Curve</name>
        <t>Parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>p = 2^384 - 317</tt>;</t>
          </li>
          <li>
            <t><tt>a = p - 3</tt>;</t>
          </li>
          <li>
            <t><tt>b = 9305714544225430607690103672579840289571010502599374151660380\</tt>
              <tt>432967684614892230431863267093750334370523665755520868</tt>;</t>
          </li>
          <li>
            <t><tt>y_G = 14354597912740189857575301128892105630080584412759834680227\</tt>
              <tt>804744167703823413075975665088124941253511968357604377681</tt>;</t>
          </li>
          <li>
            <t><tt>q = 2^384 -</tt>
              <tt>9886438520659958522437788006980660965037549058207958390857</tt>.</t>
          </li>
        </ul>
        <t>Additional details:</t>
        <ul spacing="normal">
          <li>
            <t><tt>seed = 0x23AF000000000000</tt>;</t>
          </li>
          <li>
            <t><tt>q - 1 = 2 * 3 * 13 * 23 * 1217 * r_{363}</tt>;</t>
          </li>
          <li>
            <t><tt>q + 1 = 2^3 * 5 * 17 * r_{375}</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-bign-curve512v1-curve">
        <name>The <tt>bign-curve512v1</tt> Curve</name>
        <t>Parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>p = 2^512 - 569</tt>;</t>
          </li>
          <li>
            <t><tt>a = p - 3</tt>;</t>
          </li>
          <li>
            <t><tt>b = 5693315954776639630120063851326436520321079941853637540614063\</tt>
              <tt>30518654910952117316642438613460648635268246458383207794163900221\</tt>
              <tt>6168909012147763529108397200</tt>;</t>
          </li>
          <li>
            <t><tt>y_G = 88068524280977427056041105285534523859274846872460955723526\</tt>
              <tt>40065245926924845204146464197290441971825763243615352431448274721\</tt>
              <tt>410823777569490499978268765629</tt>;</t>
          </li>
          <li>
            <t><tt>q = 2^512 - 34941104250934712071732195640491222284153110230636945\</tt>
              <tt>247985077724188765679887</tt>.</t>
          </li>
        </ul>
        <t>Additional details:</t>
        <ul spacing="normal">
          <li>
            <t><tt>seed = 0xAE17020000000000</tt>;</t>
          </li>
          <li>
            <t><tt>q - 1 = 2^4 * 23 * 79 * 767957 * 4433647 * 103529265929 * r_{419}</tt>;</t>
          </li>
          <li>
            <t><tt>q + 1 = 2 * 3^2 * 5 * 19 * 13997 * 93740551 * 20778982613 * r_{427}</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="ASN1">
      <name>ASN.1 Definitions</name>
      <section anchor="identifiers">
        <name>Identifiers</name>
        <t>To support STB algorithms in X.509 certificates <xref target="RFC5280"/>, this specification
introduces the following ASN.1 object identifiers:</t>
        <ul spacing="normal">
          <li>
            <t><tt>bign-with-hbelt</tt>, <tt>bign-with-bash384</tt> and <tt>bign-with-bash512</tt> for the
algorithms of the same name;</t>
          </li>
          <li>
            <t><tt>bign-pubkey</tt> for public keys of the Bign algorithms;</t>
          </li>
          <li>
            <t><tt>bign-curve256v1</tt>, <tt>bign-curve384v1</tt> and <tt>bign-curve512v1</tt> for the
recommended curves of the same name.</t>
          </li>
        </ul>
        <t>The identifiers are defined as follows:</t>
        <artwork><![CDATA[
   stb OBJECT IDENTIFIER ::= {iso(1) member-body(2) by(112) 0 2 0}

   belt OBJECT IDENTIFIER ::= {stb 34 101 31}
   belt-hash OBJECT IDENTIFIER ::= {belt 81}

   bash OBJECT IDENTIFIER ::= {stb 34 101 77}
   bash256 OBJECT IDENTIFIER ::= {bash 11}
   bash384 OBJECT IDENTIFIER ::= {bash 12}
   bash512 OBJECT IDENTIFIER ::= {bash 13}

   bign OBJECT IDENTIFIER ::= {stb 34 101 45}

   bign-with-hbelt OBJECT IDENTIFIER ::= {bign 12}
   bign-with-bash384 OBJECT IDENTIFIER ::= {bign 14}
   bign-with-bash512 OBJECT IDENTIFIER ::= {bign 15}

   bign-keys OBJECT IDENTIFIER ::= {bign keys(2)}
   bign-pubkey OBJECT IDENTIFIER ::= {bign-keys 1}

   bign-curves OBJECT IDENTIFIER ::= {bign curves(3)}
   bign-curve256v1 OBJECT IDENTIFIER ::= {bign-curves 1}
   bign-curve384v1 OBJECT IDENTIFIER ::= {bign-curves 2}
   bign-curve512v1 OBJECT IDENTIFIER ::= {bign-curves 3}
]]></artwork>
      </section>
      <section anchor="public-keys">
        <name>Public Keys</name>
        <t>At a security level <tt>l</tt>, the public key <tt>Q</tt> is represented as the binary string
<tt>Point2Bin(Q, 4l)</tt>. It is described by the following ASN.1 type:</t>
        <artwork><![CDATA[
   PublicKey ::= BIT STRING (SIZE(512|768|1024)).
]]></artwork>
        <t>In X.509 certificates, the public key is described as follows:</t>
        <artwork><![CDATA[
   SubjectPublicKeyInfo ::= SEQUENCE {
     algorithm         AlgorithmIdentifier,
     subjectPublicKey  PublicKey
   }

   AlgorithmIdentifier ::= SEQUENCE {
     algorithm   OBJECT IDENTIFIER (bign-pubkey),
     parameters  DomainParameters
   }

   DomainParameters ::= CHOICE {
     named  OBJECT IDENTIFIER
        (bign-curve256v1|bign-curve384v1|bign-curve512v1)
   }
]]></artwork>
        <aside>
          <t>Note: This specification narrows the options for <tt>DomainParameters</tt> offered
by <xref target="Stb45"/>.</t>
        </aside>
      </section>
    </section>
    <section anchor="TEST">
      <name>Test vectors</name>
      <section anchor="test-vectors-for-belt-algorithms">
        <name>Test Vectors for Belt algorithms</name>
        <section anchor="test-vectors-for-belt-block">
          <name>Test Vectors for <tt>belt-block</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 16)
K = BeltH(128, 32)
Y = belt-block(X, K):
  0x69CCA1C93557C9E3D66BC3E0FA88FA6E
]]></artwork>
        </section>
        <section anchor="test-vectors-for-belt-compress">
          <name>Test Vectors for <tt>belt-compress</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 64)
(S, Y) = belt-compress(X):
  0x46FE7425C9B181EB41DFEE3E72163D5A,
  0xED2F5481D593F40D87FCE37D6BC1A2E1\
    B7D1A2CC975C82D3C0497488C90D99D8
]]></artwork>
        </section>
        <section anchor="test-vectors-for-belt-che256">
          <name>Test Vectors for <tt>belt-che256</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 15)
I = BeltH(16, 32)
K = BeltH(128, 32)
S = BeltH(192, 16)
(Y, T) = belt-che256(X, I, K, S):
  0xBF3DAEAF5D18D2BCC30EA62D2E70A4,
  0x548622B844123FF7
]]></artwork>
          <artwork><![CDATA[
Y = BeltH(64, 20)
I = BeltH(80, 32)
K = BeltH(160, 32)
S = BeltH(208, 16)
T = 0x7D9D4F59D40D197D
X = belt-che256-inv(Y, I, T, K, S):
  0x2BABF43EB37B5398A9068F31A3C758\
    B762F44AA9
]]></artwork>
        </section>
        <section anchor="test-vectors-for-belt-hash">
          <name>Test Vectors for <tt>belt-hash</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 13)
Y = belt-hash(X):
  0xABEF9725D4C5A83597A367D14494CC25\
    42F20F659DDFECC961A3EC550CBA8C75
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 32)
Y = belt-hash(X):
  0x749E4C3653AECE5E48DB4761227742EB\
    6DBE13F4A80F7BEFF1A9CF8D10EE7786
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 48)
Y = belt-hash(X):
  0x9D02EE446FB6A29FE5C982D4B13AF9D3\
    E90861BC4CEF27CF306BFB0B174A154A
]]></artwork>
        </section>
      </section>
      <section anchor="test-vectors-for-bash-algorithms">
        <name>Test Vectors for Bash Algorithms</name>
        <section anchor="test-vectors-for-bash256">
          <name>Test Vectors for <tt>bash256</tt></name>
          <artwork><![CDATA[
X = NIL
Y = bash256(X):
  0x114C3DFAE373D9BCBC3602D6386F2D6A\
    2059BA1BF9048DBAA5146A6CB775709D
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 127)
Y = bash256(X):
  0x3D7F4EFA00E9BA33FEED259986567DCF\
    5C6D12D51057A968F14F06CC0F905961
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 128)
Y = bash256(X):
  0xD7F428311254B8B2D00F7F9EEFBD8F30\
    25FA87C4BABD1BDDBE87E35B7AC80DD6
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 135)
Y = bash256(X):
  0x1393FA1B65172F2D18946AEAE576FA1C\
    F54FDD354A0CB2974A997DC4865D3100
]]></artwork>
        </section>
        <section anchor="test-vectors-for-bash384">
          <name>Test Vectors for <tt>bash384</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 95)
Y = bash384(X):
  0x64334AF830D33F63E9ACDFA184E32522\
    103FFF5C6860110A2CD369EDBC04387C\
    501D8F92F749AE4DE15A8305C353D64D
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 96)
Y = bash384(X):
  0xD06EFBC16FD6C0880CBFC6A4E3D65AB1\
    01FA82826934190FAABEBFBFFEDE93B2\
    2B85EA72A7FB3147A133A5A8FEBD8320
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 108)
Y = bash384(X):
  0xFF763296571E2377E71A1538070CC0DE\
    88888606F32EEE6B082788D246686B00\
    FC05A17405C5517699DA44B7EF5F55AB
]]></artwork>
        </section>
        <section anchor="test-vectors-for-bash512">
          <name>Test Vectors for <tt>bash512</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 63)
Y = bash512(X):
  0x2A66C87C189C12E255239406123BDEDB\
    F19955EAF0808B2AD705E249220845E2\
    0F4786FB6765D0B5C48984B1B16556EF\
    19EA8192B985E4233D9C09508D6339E7
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 64)
Y = bash512(X):
  0x07ABBF8580E7E5A321E9B940F667AE20\
    9E2952CEF557978AE743DB086BAB4885\
    B708233C3F5541DF8AAFC3611482FDE4\
    98E58B3379A6622DAC2664C9C118A162
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 127)
Y = bash512(X):
  0x526073918F97928E9D15508385F42F03\
    ADE3211A23900A30131F8A1E3E1EE21C\
    C09D13CFF6981101235D895746A4643F\
    0AA62B0A7BC98A269E4507A257F0D4EE
]]></artwork>
          <artwork><![CDATA[
X = BeltH(0, 192)
Y = bash512(X):
  0x8724C7FF8A2A83F22E38CB9763777B96\
    A70ABA3444F214C763D93CD6D19FCFDE\
    6C3D3931857C4FF6CCCD49BD99852FE9\
    EAA7495ECCDD96B571E0EDCF47F89768
]]></artwork>
        </section>
        <section anchor="test-vectors-for-bash-prg-ae2561">
          <name>Test Vectors for <tt>bash-prg-ae2561</tt></name>
          <artwork><![CDATA[
A = BeltH(0, 16)
K = BeltH(32, 32)
X = Rep(0, 1536)
I = BeltH(64, 49)
(Y, T) = bash-prg-ae2561(A, X, I, K):
  0x690673766C3E848CAC7C05169FFB7B77\
    51E52A011040E5602573FAF991044A00\
    4329EEF7BED8E6875830A91854D1BD2E\
    DC6FC2FF37851DBAC249DF400A0549EA\
    2E0C811D499E1FF1E5E32FAE7F0532FA\
    4051D0F9E300D9B1DBF119AC8CFFC48D\
    D3CBF1CA0DBA5DD97481C88DF0BE4127\
    85E40988B31585537948B80F5A9C49E0\
    8DD684A7DCA871C380DFDC4C4DFBE61F\
    50D2D0FBD24D8B9D32974A347247D001\
    BAD5B168440025693967E77394DC088B\
    0ECCFA8D291BA13D44F60B06E2EDB351,
  0xCDE5AF6EF9A14B7D0C191B869A6343ED\
    6A4E9AAB4EE00A579E9E682D0EC051E3
]]></artwork>
        </section>
      </section>
      <section anchor="test-vectors-for-bign-algorithms">
        <name>Test Vectors for Bign Algorithms</name>
        <section anchor="settings">
          <name>Settings</name>
          <t>Test vectors are constructed using the settings given below.</t>
          <ul spacing="normal">
            <li>
              <t>Elliptic curve parameters: <tt>bign-curve256v1</tt>.</t>
            </li>
            <li>
              <t>A private key <tt>d</tt>:</t>
            </li>
          </ul>
          <artwork><![CDATA[
Int2Bin(d, 256):
  0x1F66B5B84B7339674533F0329C74F218\
    34281FED0732429E0C79235FC273E269
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>A public key <tt>Q</tt>:</t>
            </li>
          </ul>
          <artwork><![CDATA[
Point2Bin(Q, 512):
  0xBD1A5650179D79E03FCEE49D4C2BD5DD\
    F54CE46D0CF11E4FF87BF7A890857FD0\
    7AC6A60361E8C8173491686D461B2826\
    190C2EDA5909054A9AB84D2AB9D99A90
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>A hashing algorithm <tt>h</tt>: <tt>belt-hash</tt> with
<tt>OID(belt-hash) = 0x06092A7000020022651F51</tt>.</t>
            </li>
          </ul>
        </section>
        <section anchor="test-vectors-for-bign-genk">
          <name>Test Vectors for <tt>bign-genk</tt></name>
          <artwork><![CDATA[
H:
  0xABEF9725D4C5A83597A367D14494CC25\
    42F20F659DDFECC961A3EC550CBA8C75
t = NIL
K:
  0xD61E3A910550E3BCAD5BF4F526FB8DAA\
    DEA9C132E0BAEE03169DF4DF9BD6C20C
Int2Bin(k = bign-genk(d, H), 256):
  0x829614D8411DBBC4E1F2471A40045864\
    40FD8C9553FAB6A1A45CE417AE97111E
]]></artwork>
          <artwork><![CDATA[
H:
  0x9D02EE446FB6A29FE5C982D4B13AF9D3\
    E90861BC4CEF27CF306BFB0B174A154A
t:
  0xBE32971343FC9A48A02A885F194B09A1\
    7ECDA4D01544AF
K:
  0xAE44316332A85C3B9F6B31EEEADFF088\
    D30FE507021AC86A3EC8E0874ED33648
Int2Bin(k = bign-genk(d, H), 256):
  0x7ADC8713283EBFA547A2AD9CDFB245AE\
    0F7B968DF0F91CB785D1F932A3583107
]]></artwork>
        </section>
        <section anchor="test-vectors-for-bign-sign">
          <name>Test Vectors for <tt>bign-sign</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 13)
H:
  0xABEF9725D4C5A83597A367D14494CC25\
    42F20F659DDFECC961A3EC550CBA8C75
Int2Bin(k, 256):
  0x4C0E74B2CD5811AD21F23DE7E0FA742C\
    3ED6EC483C461CE15C33A77AA308B7D2
Point2Bin(R, 512):
  0xCCEEF1A313A406649D15DA0A851D486A\
    695B641B20611776252FFDCE39C71060\
    7C9EA1F33C23D20DFCB8485A88BE6523\
    A28ECC3215B47FA289D6C9BE1CE837C0
S = bign-sign(X, d):
  0xE36B7F0377AE4C524027C387FADF1B20\
    CE72F1530B71F2B5FD3A8C584FE2E1AE\
    D20082E30C8AF65011F4FB54649DFD3D
]]></artwork>
        </section>
        <section anchor="test-vectors-for-bign-vfy">
          <name>Test Vectors for <tt>bign-vfy</tt></name>
          <artwork><![CDATA[
X = BeltH(0, 48)
S:
  0x47A63C8B9C936E94B5FAB3D9CBD78366\
    290F3210E163EEC8DB4E921E8479D413\
    8F112CC23E6DCE65EC5FF21DF4231C28
H:
  0x9D02EE446FB6A29FE5C982D4B13AF9D3\
    E90861BC4CEF27CF306BFB0B174A154A
Point2Bin(R, 512):
  0x1D5A382B962D4ED06193258CA6DE535D\
    8FD7FACB853171E932EF93B5EE800120\
    03DBB7B5BD07036380BAFA47FCA7E6CA\
    3F179EDDD1AE5086647909183628EDDC
t:
  0x47A63C8B9C936E94B5FAB3D9CBD78366
bign-vfy(X, S, Q):
  1
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="N." surname="Kozlovskaya" fullname="Nastassia Kozlovskaya">
        <organization>APMI, Belarusian State University</organization>
        <address>
      </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+V9e3fbRrLn//wU2Mw5e8mElPF+KJOcBUnQ1nXsOJaSsdc3
FiESkjDmywQpW7F8P/v+qrobaICkLGeyu/fs+lgSCfSjurreXd3d6/Vam3wz
y46Nb07P+sZgfbvaLK/W6eo6nxgv0nU6zzbZujAul2vjbJ0uitVyvTF+Sm+z
tXGaTbbrfHNrtM9+Ou20DOPFerlZTpYz4zdUyZcLwzpyvmmlFxfr7ObYKDYX
vc2ssJzWdDlZoOFjY7pOLze9d+lsWVynvbJAz7RaxfZinhfUyuZ2haL5Ypqt
MvxabFqTdJNdLde39PRy2ULbVmuWLq6OjWzRylfrY2Oz3hYb2zQj024Vm3Qx
PUcfCzRzmxWtYp6uN+fvt8tNVognq/zYeAPQu0aB4a2zywKfbuf04fdWK91u
rpfr45bRwxgNQ4B+mq2vslsjvsqzm3xyzW/yBdo7Pao/XK6v0kX+R7rBUI6N
+MWzk67Rz2YpIMzThXG6wWCMXxf5DeFsc8t1snmaz46NVLaT/4+LYnt0cVuH
4Hn+bjlLc+OpQF8FwfOj2rM6ACfPukY8SafZ/NZYXhqnkzxbTLKCPkuodAjk
1PyPfH50kRa9RbYhMFoTzMo6v9huGC11qFLgG/OWGk+Xf8yWN8W79LYBW+P5
1yKotViu5yh9kx230MDL0cCzQ/NYfIxC18djogu9EGYkvlya3jH3qCg++bgC
USw2eTozTnsXy49Z8Y0okGJyN8fG9WazKo4fPcpW63yxOcrTyfoI4D4CZbmP
TNvlwlPAd2zgkcdfi2ydZwUBIDozwA3FJjeex8/LYaFvq2usVkeGZfo9y7JF
tyWh8b+e/HuAru4nRYnY4y+S2k4/Mfq5JLS8Wzb6iRfTNfXTfPvFfmgCHj97
atp19KPKmdGfLSfvjEG+us7W+5Gfrj/mN4z29KJ4ZPuWeeRYVhDWkW8fQP6v
q3V6M8sWeWb8z7S4vr7ON8t/GieCPiY5TYXfdjtiNlwz6LmWbbRPFsbLLVHx
ovNfaGp+OzIepzN8fJf/s9HRb/kEzLjn9Z/rCWz6LH+3ne2OSEmdndfc0XPm
YrDTAGwFFQGpcqJYEfqg1BgNabPT/+st5MR1Cq5rdP8a9W+brx5EgFe5bdbp
7+w6MwbLLQM6X04z40O+uYYKmZASzKbGYsmSEdrDyDeFkX3cZAtWa5ulEScP
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
p1M6x5vqieDL/wJ6wQGOse0AAA==

-->

</rfc>
