<?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.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kalosha-stb-tls13-00" category="info" submissionType="independent" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.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-00"/>
    <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="September" day="01"/>
    <abstract>
      <?line 214?>

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

<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>
    </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] &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 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>
        </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 of <tt>belt-hash</tt> and <tt>belt-che256</tt> is analyzed in <xref target="Agi26"/> and
<xref target="Agi20"/>, respectively. The security-driven design rationale of the Bash
algorithms is grounded in <xref target="AMMS17"/>. The security of the Bign signature
algorithms, which instantiate the short Schnorr signature, is justified, for
example, in <xref target="BloLee19"/>.</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="2005(1), pp. 106-112"/>
        </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" month="June"/>
          </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="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" target="https://apmi.bsu.by/assets/files/std/belt-spec372.pdf">
          <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" target="https://apmi.bsu.by/assets/files/std/bign-spec296.pdf">
          <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" target="https://apmi.bsu.by/assets/files/std/bash-spec244.pdf">
          <front>
            <title>STB 34.101.77-2020. Information technology and security. Sponge-based 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" target="https://apmi.bsu.by/assets/files/std/btls-spec221.pdf">
          <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 1540?>

<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 -- 11
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 12 and 13 speed up reduction modulo <tt>p</tt> and point doubling.
Requirement 14 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:
H4sIAAAAAAAAA919e3fbxpLn//wU2OScGTKhZLwfyk3OgiBoa5I4iaXk2uuJ
RYiEJFzzZYKUrVi+n31/Vd0NNEBStnMzM3vWx5JIoB/V1fXu6u6jo6POptjM
8hPji7PzgZGs71ab5fU6W90UE+PnbJ3N802+Lo2r5do4X2eLcrVcb4wfsrt8
bZzlk+262NwZ3fMfznodw/h5vdwsJ8uZ8RuqFMuFYR07X3Syy8t1fntilJvL
o82stJzOdDlZoOETY7rOrjZHr7PZsrzJjqoCR6bZKbeX86KkVjZ3KxQtFtN8
lePXYtOZZJv8erm+o6dXyw7adjqzbHF9YuSLTrFanxib9bbc2KYZmXan3GSL
6QX6WKCZu7zslPNsvbl4s11u8lI8WRUnxkuA3jdKDG+dX5X4dDenD793Otl2
c7Ncn3SMI4zRMAToZ/n6Or8z4usivy0mN/ymWKC9s+Pmw+X6OlsUf2QbDOXE
iH/+8bRvDPJZBgiLbGGcbTAY49dFcUs429xxnXyeFbMTI5PtFP/7stweX941
IXhavF7OssL4XqCvhuDpceNZE4DTH/tGPMmm+fzOWF4ZZ5MiX0zykj5LqHQI
5NT872J+fJmVR4t8Q2B0JpiVdXG53TBamlBlwDfmLTO+X/4xW96Wr7O7Fmyt
55+LoM5iuZ6j9G1+0kEDz0aJZ4fmifgYha6Px0QXeiHMSHy1NL0T7lFRfPpu
BaJYbIpsZpwdXS7f5eUXokCGyd2cGDebzao8efQoX62Lxea4yCbrY4D7CJTl
PjJtlwtPAd+JgUcefy3zdZGXBIDozAA3lJvCeBo/rYaFvql81+r1jdXq2LBM
/8iybNF5RW7870j+PUBdDxOkRO/JRwlup58Y/VwRcl4vW/3Ei+ma+mm//Wg/
YhpsszkH5ze5kSy3C0gZY76c5sbbYnMDPp6QJMqnxmLJ5AkWNopNaeTvNvmC
ZctmacTpp06XbT5yHKsxXbZ5YLp+zDbHxm/L1Rqkui5YHB4DUMvq2nK6giPb
/Z+ZK4lDv4nDn4ANoLFU8hi8fJnPNkc3WXnDmONvk+V8tc5LSeIVGvwj0+cn
6wma+nmdH63Wy0meT4vFNYsFatryMCl/X65flzfLlQHsJ9v1GpwDnQCZXGK8
UnXMlteKorrJOT/7d+pEYs51vSM3MP/nkPfjj2dW0MTeAFg6uoK0XSwx1LXx
w7PnBtTc4jo3rraLCYmlTyUzy3/khUEDv1bweWQW6lQW/j8kEX47Bsjryc32
daub37JpMd9596fFzo9ZOcu2baEzy9+BkDE7rdd/eixn+TxfLG/bY5lhMOjg
duf9p1DXYLb8Ic+taC93/ridbYqjbakbTqSAb8igOpvcQKvhTXG9yDZbsCnL
Qdk7mJJ5Emp1cf3JtBg9siypkypijHROb3B5+uuzn5JnL34+J5lgCwr0LffI
d51PIML/OKbBT14XLXz+R77O50V203y7S8FA2w7xbhfXN0uIGnqHl8lNbrV0
x7AoJ2vYp8YPy+sMCL2Zkwl6OcvnAn1GvH1XzIpsfWecLlbbTUv0WYc0AEZT
SzP0c7ucHRu2I0WYF0CE+Z+ElCfHBPZy0cYKhmY8yXP5Em+f/Pib6TYH93hb
QBtCy6WzGcQDzHHI3NtcN9HvmuMx3Xp2n+ZvjReQ10AkUcZ1vv4EgIfHxpNs
8RoEvQPyMIO8n+283sO++SL/Iy93+PdqDWXefLlLBr/BwdjArmjTwmS52dQv
8faHYvq0yKOWJB8ViwLUMCry2bQx11YUBTVukmx+uS6m1zr7Eo8p1fggjp4d
U+ezFoTPttPl7Ep/06oGSgDAEGDrHCCuW9WfwNGaTZslUOTHyePfirxNGOe6
qiftvsrXbO3CUFL6+jHs9qJ8pAyrH8mw6j5OfuzJjlFsiWrZ5yg3mLxW5Byi
uNOnw0p+yMcfoTUilsnjdf52h9Rui2nz1a60AV6uszZbLW8W8gXeQKRGVsve
v7oqyN/Z1HLWeAySFHgwLu+MM3INjSRb79CP9Ymywu06yqj3rSMr+BRDMTn+
+VipgNaYEii70tBe08g2l05rZOS7O+6xZcLjto7IuD2GyJM+EBnLOVUnEJli
FPkcG6kwtIuKo9nQBtFcM3mxoweHPpvB3yYBe8BBylbz4lg4qY/g/eWb8tFV
McvLR+Vm+oitz3KVT5zAPl5Nr/aZ4Q/ihyhe6NtkOZ8Xmw1EJwUkzsizx1xJ
51ER/7N8tb2cQWBqPq1Am+sdRBsMU2gE5xPRNiyui02meL2sqIlKvYbNtalC
JTXmDHjQkIFoNlcSfUIS/U+hFD0ySu3I30Gp5fw3ojQIDqI0CD6DEiV4Z2x4
HwlUTRrRqDYNtijo8/BHNj/jz3Ur/EmEGf/FGIvMgxiLTMKY/4lECIgkiAcj
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
gS3dvJlWBs9GLYJz6t4TYfSrxfc1Lb6vq8X3tb74vq723u89jKKK+pPgX5Br
uSezhJNH1vIqAloJUIWdBwobrwikRhrKWuykqh47dUvuR1vi386D7cmVzrXY
cVWVdvnZ+wW7WUc7G9K54UXzNL56Q7vHlRfaMQS+moW12NazbmxXR9nqdD4a
XCF2GS2M+lhZ5WKse3uJsC/uSBF7IF/ru/HWcs+/Unevd20KIRX+OjbeY6tV
uTVG5dxWN/VoIY69Nhzz6o3OnDX/V7EITU4oCfKxvJas0oi6NvzmM6TIA/st
3ztaIkylr1tmISeICHVJvH161VA56kKChspoZep2X/eNZ+Lktab26Erep9xc
PjdqX8sNVdFq+XWjUZIqT7RVvWf09jUbrWLPnHlILNUOw7NKMD2B8zWrstAF
QypG6r42auJ90sOXyr1GL3yH16tZbyqDBW+EbyLoXuSKVdvnmnR/tseWvvpU
K/r/L7KXZp+k/p3jY/RiTLV7vZ8HXYIGxQnD+XO8g/H92T1FNZxZexnYbCRf
npHGque7Cnfc4yEdqKY2zOG7da+y6BzRRU1UVo8Snd/s68ptMamnSL/bbdT/
WqNYSZg9irbuI91fBLUSDM846rKn3+bBSJ/DUaFombBCp7fsazxq+z5G0riw
XttySCYxXcH+/ssB/ojF2UTcXnNGN1uXn7EaK2+94Rux65atY0esgUUmr3Td
680bO//uf2M/o3s++LXH3/nGl0YJzhBVXzqHd3Tt39b1cAm0NwbUF3SG5EXy
JLU9X3x+Ep/BEEeH4/fmu9Gob5jvrCEUwH3z8DcuoR1ZWrWH6hc/P3t8EVOT
Fn/nCnp7qWivlUl3X50aY6jNWGe/np7Xm7HoGvLGnNEOrLPtii5JV4b/w0Do
M8fX3NC16NVB6kXZaUw/CFA5F/W1aQ8gDQ0uVyLwjvmnPMMWqaiLqyFoLuQO
BIgGtYJc3NYPLV+swXbev382SqLQ9el+nrNcnN4RUEIGCUceMhEfrcWu+d72
zXKynPXb6T3iZJoD+ZcdPu9+TttSp8q1HC9XGZzSC9rDxCvR+XU2ubsQ/VzI
WxjV0jdDPZZLqh3VAuBKqkQkylKh4/QhQPuGB3xvxJa6zXLD2OIbnHaTK6UT
LXPVWmNqJja55gdO68BILnmZpFIt4nqiplEDE/cDBw94ebiRaDaO4RaMY5Gu
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
6YzOxaR6MvjyfwFvrSGVCt4AAA==

-->

</rfc>
