<?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-rfc2629 version 1.5.17 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ssmith-cesr-02" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="CESR">Composable Event Streaming Representation (CESR)</title>
    <seriesInfo name="Internet-Draft" value="draft-ssmith-cesr-02"/>
    <author initials="S." surname="Smith" fullname="S. Smith">
      <organization>ProSapien LLC</organization>
      <address>
        <email>sam@prosapien.com</email>
      </address>
    </author>
    <date year="2021" month="December" day="01"/>
    <area>TODO</area>
    <workgroup>TODO Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Composable Event Streaming Representation (CESR) is dual text-binary encoding format that has the unique property of text-binary concatenation composability. This composability property enables the round trip conversion en-masse of concatenated primitives between the text domain and binary domain while maintaining separability of individual primtives. This enables convenient usability in the text domain and compact transmission in the binary domain. CESR primitives are self-framing. CESR supports self-framing group codes that enable stream processing and pipelining in both the text and binary domains. CESR supports composable text-binary encodings for general data types as well as suites of cryptographic material. Popular cryptographic material suites have compact encodings for efficiency while less compact encodings provide sufficient extensibility to support all foreseeable types. CESR streams also support interleaved JSON, CBOR, and MGPK serializations. CESR is a universal encoding that uniquely provides dual text and binary domain representations via composable conversion.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/WebOfTrust/ietf-cesr"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>One way to better secure Internet communications is to use cryptographically verifiable primitives and data structures in communication. These provide essential building blocks for zero trust computing and networking architectures. Traditionally cryptographic primitives that include but are not limited to digests, salts, seeds (private keys), public keys, and digital signatures have been largely represented in some type of binary encoding. This limits their usability in domains or protocols that are human centric or equivalently that only support <xref target="ASCII" format="default"/> text-printable characters, <xref target="RFC20" format="default"/>. These domains include source code, <xref target="JSON" format="default"/> documents, <xref target="RFC4627" format="default"/>, system logs, audit logs, Ricardian contracts, and human readable text documents of many types.</t>
      <t>Generic binary-to-text, <xref target="Bin2Txt" format="default"/>, or simply textual encodings such as Base64, <xref target="RFC4648" format="default"/>, do not provide any information about the type or size of the underlying cryptographic primitive. Base64 only provides value information. More recently <xref target="Base58Check" format="default"/> was developed as a fit for purpose textual encoding of cryptographic primitives for shared distributed ledger applications that in addition to value may include information about the type and in some cases the size of the underlying cryptographic primitive, <xref target="WIF" format="default"/>. But each application may use a non-interoperable encoding of type and optionally size. Interestingly because a binary encoding may include as a subset some codes that are in the text-printable compatible subset of <xref target="ASCII" format="default"/> such as ISO Latin-1, <xref target="Latin1" format="default"/> or UTF-8, <xref target="UTF8" format="default"/>, one may <em>serendipitously</em> find, for a given cryptographic primitive, a text-printable type code from a binary code table such as the table <xref target="MCTable" format="default"/> from <xref target="MultiCodec" format="default"/> for <xref target="IPFS" format="default"/>. Indeed some <xref target="Base58Check" format="default"/> applications take advantage of the binary MultiCodec tables but only used <em>serendipitous</em> text compatible type codes. Serindipoudous text encodings that appear in binary code tables, do not, however, work in general for any size or type. So the serindipoudous approach is not universally applicable and is no substitute for a true textual encoding protocol for cryptographic primitives.</t>
      <t>In general there is no standard text based encoding protocol that provides universal type, size, and value encoding for cryptographic primitives. Providing this capability is the primary motivation for the encoding protocol defined herein.</t>
      <t>Importantly, a textual encoding that includes type, size, and value is self-framing. A self-framing text primitive may be parsed without needing any additional delimiting characters. Thus a stream of concatenated primitives may be individually parsed without the need to encapsulate the primitives inside textual delimiters or envelopes. Thus a textual self-framing encoding provides the core capability for a streaming text protocol like <xref target="STOMP" format="default"/> or <xref target="RAET" format="default"/>. Although a first class textual encoding of cryptographic primitives is the primary motivation for the CESR protocol defined herein, CESR is sufficiently flexible and extensible to support other useful data types, such as, integers of various sizes, floating point numbers, date-times as well as generic text. Thus this protocol is generally useful to encode in text data data structures of all types not merely those that contain cryptographic primitives.</t>
      <t>Textual encodings have numerous usability advantages over binary encodings. The one advantage, however, a binary encoding has over text is compactness. An encoding protocol that has the property we call <em>text-binary concatentation composability</em> or more succinctly <em>composability</em>, enables both the usability of text and the compactness of binary. Composability may be the most uniquely innovative and useful feature of the encoding protocol defined herein.</t>
      <section anchor="composability" numbered="true" toc="default">
        <name>Composability</name>
        <t><em>Composability</em> as defined here is short for <em>text-binary concatenation composability</em>. An encoding has <em>composability</em> when any set of self-framing concatenated primitives expressed in either the text domain or binary domain may be converted as a group to the other domain and back again without loss. Essentially <em>composability</em> provides round-trippable lossless conversion between text and binary representations of any set of concatenated primitives when converted as a set not merely individually. The property enables a stream processor to safely convert en-masse a a stream of text primitives to binary for compact transmission that the stream processor at the other end may safely convert back to text en-masse for further processing or archival storage as text. With the addition of group framing codes as composable primitives, such a composable encoding protocol enables pipelining (multi-plexing and de-multiplexing) of streams in either text or compact binary. This allows management at scale for high-bandwidth applications that benefit from core affinity off-loading of streams <xref target="Affinity" format="default"/>.</t>
      </section>
      <section anchor="abstract-domain-representations" numbered="true" toc="default">
        <name>Abstract Domain Representations</name>
        <t>The cryptographic primitives defined here (i.e. CESR) inhabit three different domains each with a different representation.  The first domain we call streamable text or <em>text</em> and is denoted as <em>T</em>. The third domain we call streamable binary or <em>binary</em> and is denoted as <em>B</em>. Composability is defined between the <em>T</em> and <em>B</em> domains. The third domain we call <em>raw</em> and is denoted as <em>R</em>. The third domain is special because primitives in this domain are represented by a pair or two tuple of values namely <em>(text code, raw binary)</em>. The <em>text code</em> element of the <em>R</em> domain pair is string of one or more text characters that provides the type and size information for the encoded primitive when in the <em>T</em> domain. Actual use of cryptographic primitives happens in the <em>R</em> domain using the <em>raw binary</em> element of the <tt>(code, raw binary)</tt> pair. Cryptographic primitive values are usually represented as strings of bytes that represent very large integers. Cryptographic libraries typically assume that the inputs and outputs of their functions will be such strings of bytes. The <em>raw binary</em> element of the <em>R</em> domain pair is such a string of bytes.</t>
        <t>A given primitive in the <em>T</em> domain is denoted with <tt>t</tt>.  A member of an indexed set of primitives in the <em>T</em> domain is denoted with <tt>t[k]</tt>. Likewise a given primitive in the <em>B</em> domain is denoted with <tt>b</tt>. A member of an indexed set of primitives in the <em>B</em> domain is denoted with <tt>b[k]</tt>. Similarly a given primitive in the <em>R</em> domain is denoted with <tt>r</tt>. A member of indexed set of primitives in the <em>R</em> domain is denoted with  <tt>r[k]</tt>.</t>
        <section anchor="transformations-between-domains" numbered="true" toc="default">
          <name>Transformations Between Domains</name>
          <t>Although, the composability property, mentioned above but described in detail below, only applies to conversions back and forth between the <em>T</em>, and <em>B</em>, domains, conversions between the <em>R</em>, and <em>T</em> domains as well as conversions between the <em>R</em> and <em>B</em> domains are also defined and supported by the protocol. As a result there is a total of six transformations, one in each direction between the three domains.</t>
          <t>Let <tt>T(B)</tt> denote the abstract transformation function from the <em>B</em> domain to the <em>T</em> domain. This is the dual of <tt>B(T)</tt> below.</t>
          <t>Let <tt>B(T)</tt> denote the abstract transformation function from the <em>T</em> domain to the <em>B</em> domain. This is the dual of <tt>T(B)</tt> above.</t>
          <t>Let <tt>T(R)</tt> denote the abstract transformation function from the <em>R</em> domain to the <em>T</em> domain. This is the dual of <tt>R(T)</tt> below.</t>
          <t>Let <tt>R(T)</tt> denote the abstract transformation function from the <em>T</em> domain to the <em>R</em> domain. This is the dual of <tt>T(R)</tt> above.</t>
          <t>Let <tt>B(R)</tt> denote the abstract transformation function from the <em>R</em> domain to the <em>B</em> domain. This is the dual of <tt>R(B)</tt> below.</t>
          <t>Let <tt>R(B)</tt> denote the abstract transformation function from the <em>B</em> domain to the <em>R</em> domain. This is the dual of <tt>B(R)</tt> above.</t>
          <t>Given these transformations we can complete of circuit of transformations that starts in any of the three domains and then crosses over the other two domains in either direction. For example starting in the <em>R</em> domain we can traverse a circuit that crosses into the <em>T</em> and <em>B</em> domains and then crosses back into the <em>R</em> domain as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
R->T(R)->T->B(T)->B->R(B)->R
]]></artwork>
          <t>Likewise starting in the <em>R</em> domain we can traverse a circuit that crosses into the <em>B</em> and <em>T</em> domains and then crosses back into the <em>R</em> domain as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
R->B(R)->B->T(B)->T->R(T)->R
]]></artwork>
        </section>
        <section anchor="concatenation-composability-property" numbered="true" toc="default">
          <name>Concatenation Composability Property</name>
          <t>Let <tt>+</tt> represent concatenation. Concatenation is associative and may be applied to any two primitives or any two groups or sets of concatenated primitives. For example:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
t[0] + t[1] + t[2] + t[3] = (t[0] + t[1]) + (t[2] + t[3])
]]></artwork>
          <t>If we let <tt>cat(x[k])</tt> denote the concatenation of all elements of a set of indexed primitives <tt>x[k]</tt> where each element is indexed by a unique value of <tt>k</tt> then we can denote the transformation between domains of a concatenated set of primitives as follows:</t>
          <t>Let <tt>T(cat(b[k]))</tt> denote the concrete transformation of a given concatenated set of primitives, <tt>cat(b[k])</tt> from the <em>B</em> domain to the <em>T</em> domain.</t>
          <t>Let <tt>B(cat(t[k]))</tt> denote the concrete transformation of a given concatenated set of primitives, <tt>cat(t[k])</tt> from the <em>T</em> domain to the <em>B</em> domain.</t>
          <t>The concatentation composability property between <em>T</em> and <em>B</em> is expressed as follows:</t>
          <t>Given a set of primitives <tt>b[k]</tt> and <tt>t[k]</tt> and transformations <tt>T(B)</tt> and <tt>B(T)</tt> such that <tt>t[k] = T(b[k])</tt> and <tt>b[k] = B(t[k])</tt> for all <tt>k</tt>, then <tt>T(B)</tt> and <tt>B(T)</tt> are jointly concatenation composable if and only if,</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
T(cat(b[k]))=cat(T(b[k])) and B(cat(t[k]))=cat(B(t[k])) for all k
]]></artwork>
          <t>Basically composability (over concatenation) means that the transformation of a set (as a whole) of concatenated primitives is equal to the concatentation of the set of individually transformed primitives.</t>
          <t>For example, suppose we have two primitives in the text domain, namely, <tt>t[0]</tt> and <tt>t[1]</tt> that each respectively transform to primitives in the binary domain, namely, <tt>b[0]</tt> and <tt>b[1]</tt>. The transformation duals <tt>B(T)</tt> and <tt>T(B)</tt> are composable if and only if,</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
B(t[0] + t[1]) = B(t[0]) + B(t[1]) = b[0] + b[1]
]]></artwork>
          <t>and</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
T(b[0] + b[1]) = T(b[0]) + T(b[1]) = t[0] + t[1]
]]></artwork>
          <t>The composability property allows us to create arbitrary compositions of primitives via concatenation in either the <em>T</em> or <em>B</em> domain and then convert the composition en masse to the other domain and then de-concatenate the result without loss. The self-framing property of the primitives enables de-concatenation.</t>
          <t>The composability property is an essential building block for streaming in either domain. The use of framing primitives that count other primitives enables multiplexing and demultiplexing of arbitrary groups of primitives for pipelining and/or on or off loading of streams. The text domain provides usability and the binary domain provides compactness. Composability allows efficient conversion of composed (concatenated) groups of primitives without having to individually parse each primitive.</t>
        </section>
      </section>
    </section>
    <section anchor="concrete-domain-representations" numbered="true" toc="default">
      <name>Concrete Domain Representations</name>
      <t>Text, <em>T</em>, domain representations in CESR use only the characters from the the URL and filename safe variant of the IETF RFC-4648 Base64 standard, <xref target="RFC4648" format="default"/>. Unless otherwise indicated all references to Base64 (RFC-4648) in this document imply the URL and filename safe variant. The URL and filename safe variant of Base64 uses in order the 64 characters <tt>A</tt> through <tt>Z</tt>, <tt>a</tt> through <tt>z</tt>, <tt>-</tt>, and <tt>_</tt> to encode 6 bits of information. In addition Base64 uses the <tt>=</tt> character for padding but CESR does not use the <tt>=</tt> character for any purpose.</t>
      <t>Base64, <xref target="RFC4648" format="default"/>, by itself does not satisfy the composability property. 
In CESR, both <em>T</em> and <em>B</em> domain representations include a prepended framing code prefix that is structured in such a way as to ensure composability.</t>
      <t>Suppose for example we wanted to use naive Base64 characters in the text domain and naive binary bytes in the binary domain. For the sake of the example we will call these naive text and naive binary encodings and domains. Recall that a byte encodes 8 bits of information and a Base64 character encodes 6 bits information. Furthermore suppose that we have three primitives denoted <tt>x</tt>, <tt>y</tt>, and <tt>z</tt> in the naive binary domain with lengths of 1, 2, and 3 bytes respectively.</t>
      <t>In the following diagrams we denote each byte in a naive binary primitive with zero based most significant bit first indicies.  For example, <tt>b1</tt> is bit one <tt>b0</tt> is bit zero and <tt>B0</tt> for byte zero, <tt>B1</tt> for byte 1, etc.</t>
      <t>The byte and bit level diagram for <tt>x</tt> is shown below where we use <tt>X</tt> to denote its bytes:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           X0          |
|b7:b6:b5:b4:b3:b2:b1:b0|
]]></artwork>
      <t>Likewise for <tt>y</tt> below:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           Y0          |           Y1          |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
]]></artwork>
      <t>And finally for <tt>z</tt> below:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           Z0          |           Z1          |           Z2          |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
]]></artwork>
      <t>When doing a naive Base64 conversion of a naive binary primitive, one Base64 character represents only six bits from a given byte. In the following diagrams each character of a Base64 conversion is denoted with zero based most significant character first indicies.</t>
      <t>Therefore to encode <tt>x</tt> in Base64, for example, requires at least two Base64 characters because the zeroth character only captures the six bits from the first byte and another character is needed to capture the other two bits. The convention in Base64 is use a Base64 character where the non-coding bits are zeros. This is diagrammed as follows:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           X0          |
|b7:b6:b5:b4:b3:b2:b1:b0|
|        C0       |        C1       |
]]></artwork>
      <t>Naive Base64 encoding always pads each individual conversion of a string of bytes to an even multiple of four characters. This provides something that may be described as It may be described as a sort of one-way composability but it is not true composability because it only works for a set of distinct conversions that are concatented after conversion not a single conversion of a concatenated set.  We show the pads by replacing the spaces with <tt>=</tt> characters. The naive Base64 conversion of <tt>x</tt> is as follows:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           X0          |
|b7:b6:b5:b4:b3:b2:b1:b0|
|        C0       |        C1       |========C2=======|========C3=======|

]]></artwork>
      <t>Likewise <tt>y</tt> requires at least 3 Base64 characters to capture all of its 16 bits as follows:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           Y0          |           Y1          |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
|        C0       |        C1       |        C1       |
]]></artwork>
      <t>Alignment on a 4 character boundary requires one pad character this becomes:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           Y0          |           Y1          |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
|        C0       |        C1       |        C2       |========C3=======|
]]></artwork>
      <t>Finally because <tt>z</tt>  requires exactly four Base64 characters to capture all of its 24 bits, there are no pad characters needed.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           Z0          |           Z1          |           Z2          |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
|        C0       |        C1       |        C2       |        C3       |
]]></artwork>
      <t>Suppose we concatenate <tt>x + y</tt> into a three byte composition in the naive binary domain before Base64 encoding the concatentated whole. We have the following:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|           X0          |           Y0          |           Y1          |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
|        C0       |        C1       |        C2       |        C3       |
]]></artwork>
      <t>We see that the least significant two bits of X0 are encoded into the same character, <tt>C1</tt> as the most significant four bits of <tt>Y0</tt>. Therefore, a text domain parser is unable to cleanly de-concatenate on a character by character basis the conversion of <tt>x + y</tt> into separate text domain primitives. Thus naive binary to Base64 conversion does not satisfy the composability constraint.</t>
      <t>Suppose instead we start in the text domain with primitives <tt>u</tt> and <tt>v</tt> of lengths 1 and 3 characters respectively.
If we concatenate these two primitives as <tt>u + v</tt> in text domain and then convert as a whole to naive binary. We have the following:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
|        U0       |        V0       |        V1       |        V2       |
|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|b7:b6:b5:b4:b3:b2:b1:b0|
|           B0          |           B1          |           B2          |
]]></artwork>
      <t>We see that all six bits of information in <tt>U0</tt> is included with the least significant two bits of information in <tt>V0</tt> in <tt>B0</tt>. Therefore a binary domain parser is unable to cleanly de-concatenate on a byte by byte basis the conversion of <tt>u + v</tt> into separate binary domain primitives. Thus naive Base64 to binary conversion does not satisfy the composability constraint.</t>
      <t>Indeed the composability property is only satisfied if each primitive in the <em>T</em> domain is an integer multiple of four Base64 characters and each primitive in the <em>B</em> domain is an integer multiple of three bytes. Each of Four Base64 characters and three bytes capture twenty-four bits of information. Twenty-four is the least common multiple of six and eight. Therefore primitive lengths that integer multiples of either four Base64 characters or three bytes in their respective domains capture integer multiples of twenty-four bits of information. Given that constraint, conversion of concatenated primitives in one domain never result in two adjacent primitives sharing the same byte or character in the converted domain.</t>
      <t>To elaborate, when converting streams made up of concatenated primitives back and forth between the <em>T</em> and <em>B</em> domains, the converted results will not align on byte or character boundaries at the end of each primitive unless the primitives themselves are integer multiples of twenty-four bits of information. In other words all primitives must be aligned on twenty-four bit boundaries to satisfy the composibility property. This means that the minimum length of any primitive in the B domain is three bytes and the minimum length of any primitive in the T domain is four Base64 characters.</t>
      <section anchor="stable-text-type-codes" numbered="true" toc="default">
        <name>Stable Text Type Codes</name>
        <t>There are many coding schemes that could satisfy the composability constraint of alignment on 24 bit boundaries. The main reason for using a <em>T</em> domain centric encoding is higher usability or human friendliness. Indeed a primary design goal of CESR is to select an encoding approach that provides such high usability or human friendliness in the <em>T</em> domain. This type of usability goal is simpley not realizable in the <em>B</em> domain. The B domain's purpose is merely to provide convenient compactness at scale. We believe usability in the <em>T</em> domain is maximized when the type portion of the prepended framing code is <em>stable</em> or <em>invariant</em>. Stable type coding makes it much easier to recognize primitives of a given type  when debugging source, reading messages, or documents in the <em>T</em> domain that include encoded primitives. This is true even when those primitives have different lengths or values. For primitive types that have fixed lengths, i.e. all primitives of that type have the same length, stable type coding aids not only visual type but visual size recognition.</t>
        <t>Usability of stable type coding is maximized when the type portion appears first in the framing code. Stability also requires that for a given type, the type coding portion must consume a fixed integer number of characters in the <em>T</em> domain. To clarify, as used here, stable type coding in the <em>T</em> domain never shares information bits with either length or value coding in any given framing code character and appears first in the framing code. Stable type coding in the <em>T</em> domain translates to stable type coding in the <em>B</em> domain except that the type coding portion of the framing code may not respect byte boundaries. This is an acceptable tradeoff because binary domain parsing tools easily accommodate bit fields and bit shifts while text domain parsing tools no not. By in large text domain parsing tools only process whole characters. This is another reason to impose a stability constraint on the <em>T</em> domain type coding instead of the <em>B</em> domain.</t>
      </section>
      <section anchor="code-characters-and-lead-bytes" numbered="true" toc="default">
        <name>Code Characters and Lead Bytes</name>
        <t>There are two ways to provide the required alignment on 24 bit boundaries to satisfy the composability property. The first way is to increase the size of text code to ensure that the <em>T</em> domain primitive has a total size (length) that is an integer multiple of 4 (text code sizing). The other way is to increase the size of the raw binary value by pre-pending leader bytes of zeros to the raw binary value before conversion to Base64 to ensure the total size of the raw binary value with pre-pended leader bytes is an integer multiple of 3 bytes (pre-conversion raw binary sizing). This ensures that size in characters of the Base64 conversion of the raw binary with leader bytes is an integer multiple of 4 characters. In this later case therefore the length of the pre-pended type code <bcp14>MUST</bcp14>  be an integer multiple of 4 characters so that the total length of the <em>T</em> domain primitive with code and converted raw binary is an integer multiple of 4 characters.</t>
        <t>The first way (text code sizing) may be more compact in some cases. The second way (pre-conversion raw binary sizing) may be easier to compute in some cases. In order to avoid confusion with the use of the term <tt>pad</tt>, we use the term <tt>leader</tt> or <tt>lead bytes</tt> when adjusting the raw binary size pre-conversion. The term pad may be confusing not merely because both ways use a type of padding but it is also true that the the number of <tt>pad</tt> characters when padding post-conversion equals the number of <tt>lead</tt> bytes when padding pre-conversion.</t>
        <t>Suppose for example the raw binary value is 32 bytes in length. The next higher integer multiple of 3 is 33 bytes. Thus 1 additional lead byte is needed to make the size (length in byte) of raw binary an integer multiple of 3. The 1 lead byte makes that combination a total of 33 bytes in length. The resultant Base64 converted value will be 44 characters in length, which is an integer multiple of 4 characters. In contrast, recall that when  we convert a 32 byte raw binary value to Base64 the converted value will have 1 pad character which may be replaced with a text code character. In both cases the resultant length in Base64 is 44 characters.</t>
        <t>Whereas a 64 byte sized raw binary needs 2 lead bytes to make the combination 66 bytes in length where 66 is the next integer multiple of 3 greater than 64. When converted the result is 88 characters in length. The number of pad characters added on the result of the Base64 conversion of a 64 byte raw binary is also 2.</t>
        <t>In summary we can use either pre-conversion lead byte sizing or post-conversion pad character sizing in our coding scheme to ensure composable 24 bit alignment.</t>
      </section>
      <section anchor="multiple-code-table-approach" numbered="true" toc="default">
        <name>Multiple Code Table Approach</name>
        <t>The design goals for CESR framing codes include minimizing the framing code size for the most frequently used (most popular) codes while also supporting a sufficiently comprehensive set of codes for all foreseeable current and future applications. This requires a high degree of both flexibility and extensibility. We believe this is best achieved with multiple code tables each with a different coding scheme that is optimized for a different set of features instead of a single one-size-fits-all scheme. A specification that supports multiple coding schemes may appear on the surface to be much more complex to implement but careful design of the coding schemes can reduce implementation complexity by using a relatively simple single integrated parse and conversion table. Parsing in any given domain given stable type codes may then be implemented with a single function that simply reads the appropriate type selector in the table to know how to parse and convert the rest of primitive.</t>
      </section>
    </section>
    <section anchor="text-coding-scheme-design" numbered="true" toc="default">
      <name>Text Coding Scheme Design</name>
      <section anchor="text-code-size" numbered="true" toc="default">
        <name>Text Code Size</name>
        <t>Recall from above, the R domain representation is a pair<tt>(text code, raw binary)</tt>. The text code is stable and begins with one or more Base64 characters that provide the primitive type may also include one or more additional characters that provide the length. The actual usable cryptographic material is provided by the <em>raw binary</em> element. The corresponding <em>T</em> domain representation of this pair is created by first converting the <em>raw binary</em> element to Base64, then stripping off any Base64 pad characters then finally prepending the text code element to the result of the conversion.</t>
        <t>When the length of a given naive binary string is not an integer multiple of three bytes, standard Base64 conversion software appends one or two pad characters to the resultant Base64 conversion.</t>
        <t>With pad characters, a set of Base64 strings resulting from the subsequent conversions of a set of binary strings could be concatenated and then converted back to binary en masse while preserving byte boundaries. In order to preserve byte boundaries the pad characters <bcp14>MUST</bcp14> be stripped in the conversion.  Because the pad characters are stripped, this approach does not provide two-way or true composability as defined above. The number of pad characters is a function of the length of the binary string. Let <em>N</em> be the length the string. When <tt>N mod 3 = 1</tt> then there are 8 bits in remainder that must be encoded into Base64. Recall the examples above, a single byte (8 bits) require two Base64 characters. The first encodes  6 bits and the second the remaining 2 bits for a total of 8 bits. The last character is selected such that its non-coding 4 bits are zero. Thus two additional pad characters are required to pad out the resulting conversion so that its length is an integer multiple of 4 Base64 characters. When <tt>N mod 3 = 2</tt> then two bytes (16 bits) require three Base64 characters. The first two encode 6 bits each (for 12 bits) and the third encodes the remaining 4 bits for a total of 16. The last character is selected such that its non-coding 2 bits are zero. Thus one additional pad character is required to pad out the resulting conversion so that is length is an integer multiple of 4 characters. When <tt>N mod 3 = 0</tt> then the binary string is aligned on a 24 bit boundary and no pad characters are required to ensure the length of the Base64 conversion is an integer multiple of 4 characters.</t>
        <t>The number of requred Base64 pad characters to ensure that a given conversion to Base64 has a length that is an integer multiple of 4 may be computed with the following formula:</t>
        <t><tt>ps = (3 - (N mod 3)) mod 3)</tt>, where <tt>ps</tt> is the pad size and <tt>N</tt> is the size in bytes of the binary string.</t>
        <t>Recall that composability is provided here by prepending text codes that are of the appropirate length to ensure 24 bit boundaries in both the <em>T</em> and the corresponding <em>B</em> domain. The advantage of this approach is that naive Base64 software tooling may be used to convert back and forth between the <em>T</em> and <em>B</em> domains, i.e. <tt>T(B)</tt> is naive Base64 encode and <tt>B(T)</tt> is naive Base64 decode. In other words CESR primitives are compatible with existing Base64 (RFC-4648) tooling. Whereas new software tooling is needed for conversions between the <em>R</em> and <em>T</em> domains, e.g. <tt>T(R)</tt> and <tt>R(T</tt> and the <em>R</em> and <em>B</em> domains, e.g. <tt>B(R)</tt> and <tt>R(B)</tt>.</t>
        <t>This pad size computation is also useful for computing the size of the text codes. Because true composability also requires that the <em>T</em> domain value <bcp14>MUST</bcp14> be an integer multiple of 4 characters in length the size of the text code <bcp14>MUST</bcp14> also be function of the pad size, <tt>ps</tt>, and hence the length of the raw binary element, <tt>N</tt>. Thus the size of the text code in Base64 characters is a function of the equivalent pad size determined by the length <tt>N mod 3</tt> of the raw binary value. If we let <em>M</em> be a non-negative integer valued variable then we have three cases:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">Pad Size</th>
              <th align="right">Code Size</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">0</td>
              <td align="right">4M</td>
            </tr>
            <tr>
              <td align="center">1</td>
              <td align="right">4M+1</td>
            </tr>
            <tr>
              <td align="center">2</td>
              <td align="right">4M+2</td>
            </tr>
          </tbody>
        </table>
        <t>The minimum code sizes are 1, 2, and 4 characters for pad sizes of 1, 2, and 0 characters with <em>M</em> equal 0, 0, and 1 respectively. By increasing <em>M</em> we can have larger code sizes for a given pad size.</t>
      </section>
      <section anchor="count-group-or-framing-codes" numbered="true" toc="default">
        <name>Count, Group, or Framing Codes</name>
        <t>As mentioned above one of the primary advantages of a composable encoding is that special framing codes can be specified to support groups of primitivies. Grouping enables pipelining. Other suitable terms for these special framing codes are <em>group codes</em> or <em>count codes</em>. These are suitable because they can be used to count characters, primitives in a group, or count groups of primitives in a larger group. We can also use count codes as separators to organize a stream of primitives or to interleave non-native serializations. A count code is its own primitive. But it is a primitive that does not include a raw binary value, only the text code. Because a count code's raw binary element is empty, its pad size is always 0. Thus a count code's size is always an integer multiple of 4 characters i.e. 4, 8, etc.</t>
      </section>
      <section anchor="interleaved-non-cesr-serializations" numbered="true" toc="default">
        <name>Interleaved Non-CESR Serializations</name>
        <t>One extremely useful property of CESR is that special count codes enable CESR to be interleaved with other serializations. For example, Many applications use <xref target="JSON" format="default"/>, <xref target="RFC4627" format="default"/>, <xref target="CBOR" format="default"/>, <xref target="RFC8949" format="default"/>, or MsgPack <xref target="MGPK" format="default"/> to serialize flexible self-describing data structures based on hash maps, also know as dictionaries. With respect to hash map serializations, CESR primitives may appear in two different contexts. The first context is as a delimited text primitive inside of a hash map serialization. The delimited text may be either the key or value of a (key, value) pair. The second context is as a standalone serialization that is interleaved with hash map serializations in a stream. Special CESR count codes enable support for the second context of interleaving standalone CESR with other serializations.</t>
      </section>
      <section anchor="cold-start-stream-parsing-problem" numbered="true" toc="default">
        <name>Cold Start Stream Parsing Problem</name>
        <t>After a cold start a stream processor looks for framing information to know how to parse groups of elements in the stream. If that framing information is ambiguous then the parser may become confused and require yet another cold start. While processing a given stream a parser may become confused especially if a portion of the stream is malformed in some way. This usually requires flushing the stream and forcing a cold start to resynchronize the parser to subsequent stream elements. Better yet is a re-synchronization mechanism that does not require flushing the in-transit buffers but merely skipping to the next well defined stream element boundary in order to execute  cold start. Good cold start  re-synchronization is essential to robust performant stream processing.</t>
        <t>For example, in TCP a cold start usually means closing and then reopening the TCP connection. This flushes the TCP buffers and sends a signal to the other end of the stream that may be interpreted as a restart or cold start. In UDP each packet is individually framed but a stream may be segmented into multiple packets so a cold start may require an explicit ack or nack to force a restart.</t>
        <t>Special CESR count codes support re-synchronization at each boundary between interleaved CESR and other serializations like JSON, CBOR, or MGPK</t>
        <section anchor="performant-resynchronization-with-unique-start-bits" numbered="true" toc="default">
          <name>Performant Resynchronization with Unique Start Bits</name>
          <t>Given the popularity of three specific serializations, namely, JSON, CBOR, and MGPK, more fine grained serialization boundary detection for interleaving CESR may be highly beneficial both from a performance and robustness perspective. One way to provide this is by selecting the count code start bits such that there is always a unique (mutually distinct) set of start bits at each interleaved boundary between CESR, JSON, CBOR, and MGPK.</t>
          <t>Furthermore, it may also be highly beneficial to support in-stride switching between interleaved CESR text domain streams and CESR binary domain streams. In other words the start bits for count (framing) codes in both the <em>T</em> domain (Base64) and the <em>B</em> domain should be unique. This would provide the analogous equivalent of a UTF Byte Order Mark (BOM) <xref target="BOM" format="default"/>. A BOM enables a parser of UTF encoded documents to determine if the UTF codes are big endian or little endian. In the CESR case this feature would enable a stream parser to know if a count code along with its associated counted or framed group of primitives are expressed in the <em>T</em> or <em>B</em> domain. Together these impose the constraint that the boundary start bits for interleaved text CESR, binary CESR, JSON, CBOR, and MGPK be mutually distinct.</t>
          <t>Amongst the codes for map objects in the JSON, CBOR, and MGPK only the first three bits are fixed and not dependent on mapping size. In JSON a serialized mapping object always starts with <tt>{</tt>. This is encoded as <tt>0x7b</tt>. the first three bits are <tt>0b011</tt>. In CBOR the first three bits of the major type of the serialized mapping object are <tt>0b101</tt>. In MGPK (MsgPack) there are three different mapping object codes. The <em>FixMap</em> code starts with <tt>0b100</tt>. Both the <em>Map16</em> code and <em>Map32</em> code start with <tt>0b110</tt>.</t>
          <t>So we have the set of four used starting tritets (3 bits) in numeric order of <tt>0b011</tt>, <tt>0b100</tt>, <tt>0b101</tt>, and <tt>0b110</tt>. This leaves four unused tritets, namely, <tt>0b000</tt>, <tt>0b001</tt>, <tt>0b010</tt>, and <tt>0b111</tt> that may be selected as the CESR count (framing) code start bits. In Base64 there are two codes that satisfy our constraints. The first is the dash character, <tt>-</tt>, encoded as <tt>0x2d</tt>. Its first three bits are <tt>0b001</tt>. The second is the underscore character,<tt>_</tt>, encoded as <tt>0x5f</tt>. Its first three bits are <tt>0b010</tt>. Both of these are distinct from the starting tritets of any of the JSON, CBOR, and MGPK encodings above. Moreover the starting tritet of the corresponding binary encodings of <tt>-</tt> and <tt>_</tt> is <tt>0b111</tt> which is also distinct from the all the others. To elaborate, Base64 uses <tt>_</tt> in position 62 or <tt>0x3E</tt> (hex) and uses <tt>_</tt> in position 63 or <tt>0x3F</tt> (hex) both of which have starting tritet of <tt>0b111</tt></t>
          <t>This gives us two different Base64 characters, <tt>-</tt> and <tt>_</tt> we can use for the first character of any framing (count) code in the <em>T</em> domain. This also means we can have two different classes of framing (count) codes. This also provides a BOM like capability to determine if a framing code is expressed in the <em>T</em> or <em>B</em> domain. To clarify, if a stream  starts with the tritet <tt>0b111</tt> then the stream is <em>B</em> domain CESR and a stream parser would thereby know how to convert the first sextet of the stream to determine which of the two framing codes is being used, <tt>0x3E</tt> or <tt>ox3F</tt> . If on the other hand the framing code starts with either of the tritets <tt>0b001</tt> or <tt>0b010</tt> then the framing code is expressed in the <em>T</em> domain and a stream parser likewise would thereby know how to convert the first character (octet) of the framing code to determine which framing code is being used. Otherwise if a stream starts with  <tt>0b100</tt> its JSON, with <tt>0b101</tt> its CBOR and with either <tt>0b011</tt>,and <tt>0b110</tt>  its MGPK.</t>
          <t>This is summarized in the following table:</t>
          <table align="center">
            <thead>
              <tr>
                <th align="center">Starting Tritet</th>
                <th align="center">Serialization</th>
                <th align="center">Character</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="center">0b000</td>
                <td align="center"> </td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">0b001</td>
                <td align="center">CESR <em>T</em> Domain Count (Group) Code</td>
                <td align="center">
                  <tt>-</tt></td>
              </tr>
              <tr>
                <td align="center">0b010</td>
                <td align="center">CESR <em>T</em> Domain Op Code</td>
                <td align="center">
                  <tt>_</tt></td>
              </tr>
              <tr>
                <td align="center">0b011</td>
                <td align="center">JSON</td>
                <td align="center">
                  <tt>{</tt></td>
              </tr>
              <tr>
                <td align="center">0b100</td>
                <td align="center">MGPK</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">0b101</td>
                <td align="center">CBOR</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">0b110</td>
                <td align="center">MGPK</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">0b111</td>
                <td align="center">CESR <em>B</em> Domain</td>
                <td align="center"> </td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="stream-parsing-rules" numbered="true" toc="default">
          <name>Stream Parsing Rules</name>
          <t>Given this set of tritets (3 bits) we can express a requirement for well formed stream start and restart.</t>
          <t>Each stream <bcp14>MUST</bcp14> start (restart) with one of five tritets:</t>
          <t>1) A framing count (group) code in CESR <em>T</em> domain.<br/>
2) A framing count (group) code in CESR <em>B</em> Domain.<br/>
3) A JSON encoded mapping.<br/>
4) A CBOR encoded Mapping.<br/>
5) A MGPK encoded mapping.</t>
          <t>A parser merely needs to examine the first tritet (3 bits) of the first byte of the stream start to determine which one of the five it is. When the first tritet is a framing code then, the remainder of framing code itself will include the additional information needed to parse the attached group. When the first tritet indicates its JSON, CBOR, or MGPK, then the mapping's first field must be a version string that provides the additional information needed to fully parse the associated encoded serialization.</t>
          <t>The stream <bcp14>MUST</bcp14> resume with a starting byte that starts with one of the 5 tritets, either another framing code expressed in the <em>T</em> or <em>B</em> domain or a new JSON, CBOR, or MGPK encoded mapping.</t>
          <t>This provides an extremely compact and elegant stream parsing formula that generalizes not only support for CESR composabilty but also support for interleaved CESR with three of the most popular hash map serializations.</t>
        </section>
      </section>
      <section anchor="compact-fixed-size-codes" numbered="true" toc="default">
        <name>Compact Fixed Size Codes</name>
        <t>As mentioned above, CESR uses a multiple code table design that enables both size optimized text codes for the most popular primitive types and extensible universal support for all other primitive types. Modern cryptographic suites support limited sets of raw binary primitives with fixed (not variable) sizes. The design aesthetic is based on the understanding that there is a minimally sufficient cryptographic strength and more cryptographic strength is just wasting computation and bandwidth. Cryptographic strength is measured in bits of entropy which also corresponds to the number trials that must be attempted to succeed in a brute force attack. The accepted minimum for cryptographic strength is 128 bits of entropy or equivalently <tt>2**128</tt> (2 raised to the 128th power) brute force trials. The size in bytes of a given raw binary primitive for a given modern cryptographic suite is usually directly related to this minimum strength of 128 bits (16 bytes). 
For example the raw binary primitives from the well known <xref target="NaCL" format="default"/> ECC (Elliptic Curve Cryptography) library all satisfy this 128 bit strength goal. In particular the digital signing public key raw binary primitives for EdDSA are 256 bits (32 bytes) in length because well known algorithms can reduce the number of trials to brute force invert an ECC public key to get the private key by the square root of the number of scalar multiplications which is also related to the size of both the private key and public key coordinates (discrete logarithm problem <xref target="DLog" format="default"/>). Thus  256 bit (32 byte) ECC keys are needed to achieve 128 bits of cryptographic strength. In general the size of a given raw binary primitive is typically some multiple of 128 bits of cryptographic strength. This is also true for the associated EdDSA raw binary signatures which 512 bits (64 bytes) in length.</t>
        <t>Similar scale factors exist for cryptographic digests. A standard default Blake3 digest is 256 bits (32 bytes) in length in order to get 128 bits of cryptographic strength. This is also true of SHA3-256. Indeed the sweet spots for modern cryptographic raw primitive lengths are 32 bytes for many digests as well as EdDSA public keys and 64 bytes for EdDSA and ECDSA-secp256k1 signatures and 64 byte variants of the most popular digests. Therefore optimized text code tables for these two sweet spots (32 and 64 bytes) would be highly advantageous.</t>
        <t>A 32 byte raw binary value has a pad size of 1 character.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
(3 - (32 mod 3)) mod 3) = 1
]]></artwork>
        <t>Therefore the minimal text code size is 1 character for 32 byte raw binary cryptographic material and all other raw binary material values whose pad size is 1 character.</t>
        <t>A 64 byte raw binary value has a pad size of 2 characters.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
(3 - (64 mod 3)) mod 3) = 2
]]></artwork>
        <t>Therefore the minimal text code size for is 2 characters for 64 byte raw binary cryptographic material and all other raw binary material values whose pad size is 1 character. For example a 16 byte raw binary value also has a pad size of 2 characters.</t>
        <t>For all other cryptographic material values whose pad size is 0, then the minimium size text code is 4 characters. So the minimally sized texts code tables are 1, 2, and 4 characters respectively.</t>
        <t>Given that a given cryptographic primitive type has a known fixed raw binary size then we can efficiently encode that primitive type and size with just the type information. The size is given by the type.</t>
        <t>So for example an Ed25519 (EdDSA) raw public key is always 32 bytes so knowing that the type is <tt>Ed25519 public key</tt> implies the size of 32 bytes and a pad size of 1 character that therefore may be encoded with a 1 character text code. Likewise an Ed25519 (EdDSA) signature is always 64 bytes so knowing that the type is  <tt>Ed25519 signature</tt> implies the size of 64 bytes and a pad size of 2 characters that therefore may be encoded with a 2 character text code.</t>
      </section>
      <section anchor="code-table-selectors" numbered="true" toc="default">
        <name>Code Table Selectors</name>
        <t>In order to efficiently parse a stream of primitives with types from multiple text code tables the first character in the text code must be a code table selector character. Thus the 1 character text code table must do double duty. It must provide selectors for the different text code tables and also provide type codes for the most popular primitives that have a pad size of 1. There are 64 Base64 characters (64 values). We only need 12 tables to support all the codes and code formats needed for the foreseeable future. Therefore only 12 of those characters need be dedicated as code table selectors that leaves 52 characters that may be used for 1 character type codes. This gives a total of 13 type code tables consisting of the dual purpose 1 character selector table and 12 other tables.</t>
        <t>As described above the selector characters for the framing or count code tables that best support interleaved JSON, CBOR, and MGPK are <tt>-</tt> and <tt>_</tt>. We use the numerals <tt>0</tt> through <tt>9</tt> to each serve as a selector. That leaves the letters <tt>A</tt> through <tt>Z</tt> and <tt>a</tt> through <tt>z</tt> as single character selectors. This provides 52 unique type codes for fixed length primitive types with raw binary values that have a pad size of 1.</t>
        <t>To clarify, the first character of any primitive is either a selector or a 1 character code type. The characters <tt>0</tt> through <tt>9</tt>, <tt>-</tt> and <tt>_</tt> are selectors that select a given code table and indicate the number of remaining characters in the text code.</t>
      </section>
      <section anchor="small-fixed-raw-size-tables" numbered="true" toc="default">
        <name>Small Fixed Raw Size Tables</name>
        <t>There are two special tables that are dedicated to the most popular fixed size raw binary cryptographic primitive types. These are the most compact so they optimize bandwidth but only provide a small number of total types. In both of these the text code size equals the number of pad characters, i.e. the pad size.</t>
        <section anchor="one-character-fixed-raw-size-table" numbered="true" toc="default">
          <name>One Character Fixed Raw Size Table</name>
          <t>The one character type code table does not have selector character per se but uses as type codes the non-selector characters <tt>A</tt> - <tt>Z</tt> and <tt>a</tt> - <tt>z</tt>. This provides 52 unique type codes for fixed size raw binary values with pad size of 1.</t>
        </section>
        <section anchor="two-character-fixed-raw-size-table" numbered="true" toc="default">
          <name>Two Character Fixed Raw Size Table</name>
          <t>The two character type code table uses selector <tt>0</tt> as its first character. The second character is the type code. This provides 64 unique type codes for fixed size raw binary values that have a pad size of 2.</t>
        </section>
      </section>
      <section anchor="large-fixed-raw-size-tables" numbered="true" toc="default">
        <name>Large Fixed Raw Size Tables</name>
        <t>The three tables in this group are for large fixed raw size primitives. These three tables use 0, 1 or 2 lead bytes as appropriate for a pad size of 0, 1 or 2 for a given fixed raw binary value. The text code size for all three tables is 4 characters. The selector not only encodes the table but also implicitly encodes the number of lead bytes. With 3 characters for each unique type code, each table provides 262,144 unique type codes. This should be enough type codes to accommodate all fixed raw size primitive types for the foreseeable future.</t>
        <section anchor="large-fixed-raw-size-table-with-0-lead-bytes" numbered="true" toc="default">
          <name>Large Fixed Raw Size Table With 0 Lead Bytes</name>
          <t>This table uses <tt>1</tt> as its first character or selector. The remaining 3 characters provide the types codes. Only fixed size raw binaries with pad size of 0 are encoded with this table. The 3 character type code provides a total of 262,144 unique type code values (<tt>262144 = 64**3)</tt> for fixed size raw binary primitives with pad size of 0.</t>
        </section>
        <section anchor="large-fixed-raw-size-table-with-1-lead-byte" numbered="true" toc="default">
          <name>Large Fixed Raw Size Table With 1 Lead Byte</name>
          <t>This table uses <tt>2</tt> as its first character or selector. The remaining 3 characters provide the types codes. Only fixed size raw binaries with pad size of 1 are encoded with this table. The 3 character type code provides a total of 262,144 unique type code values (<tt>262144 = 64**3)</tt> . Together with the 52 values from the 1 character code table above there are 262,196 type codes for fixed size raw binary primitives with pad size of 1.</t>
        </section>
        <section anchor="large-fixed-raw-size-table-with-1-lead-byte-1" numbered="true" toc="default">
          <name>Large Fixed Raw Size Table With 1 Lead Byte</name>
          <t>This table uses <tt>3</tt> as its first character or selector. The remaining 3 characters provide the types codes. Only fixed size raw binaries with pad size of 2 are encoded with this table. The 3 character type code provides a total of 262,144 unique type code values (<tt>262144 = 64**3)</tt> . Together with the 64 values from the 2 character code table above (selector <tt>0</tt>) there are 262,208 type codes for fixed size raw binary primitives with pad size of 2.</t>
        </section>
      </section>
      <section anchor="small-variable-raw-size-tables" numbered="true" toc="default">
        <name>Small Variable Raw Size Tables</name>
        <t>Although many primitives have fixed raw binary sizes especially those for modern cryptographic suites such as keys, signatures and digests, there are other primitives that benefit from variable sizing such as encrypted material. Indeed CESR is meant to support not only cryptographic material types but other basic types such as generic text strings. These benefit from variable size codes.</t>
        <t>The three tables in this group are for small variable raw size primitives. These three tables use 0, 1 or 2 lead bytes as appropriate given the pad size of 0, 1 or 2 for a given variable size raw binary value. The text code size for all three tables is 4 characters.
The first character is the selector, the second character is the type, and the last two characters provide the size of the value as a Base64 encoded integer. The number of unique type codes is 64. A given type code is repeated in each table for the same type. What is different for each table is the number of lead bytes. The selector not only encodes the table but also implicitly encodes the number of lead bytes. The variable size is measured in quadlets of 4 characters each in the <em>T</em> domain and equivalently in triplets of 3 bytes each in the <em>B</em> domain. Thus computing the number of characters when parsing or off-loading in the <em>T</em> domain means multiplying the variable size by 4. Computing the number of bytes when parsing or off-loading in the <em>B</em> domain means multiplying the variable size by 3. The two Base64 size characters provide value lengths in quadlets/triplets from 0 to 4095 (<tt>64**2 -1</tt>). This corresponds to value lengths of up to 16,380 characters (<tt>4095 * 4</tt>) or 12,285 bytes (<tt>4095 * 3</tt>).</t>
        <section anchor="small-variable-raw-size-table-with-0-lead-bytes" numbered="true" toc="default">
          <name>Small Variable Raw Size Table With 0 Lead Bytes</name>
          <t>This table uses <tt>4</tt> as its first character or selector. The second character provides the type. The final two characters provide the size of the value in quadlets/triplets as a Base64 encoded integer. Only raw binaries with pad size of 0 are encoded with this table. The 1 character type code provides a total of 64 unique type code values. The maximum length of the value provided by the 2 size characters is 4095 quadlets of characters in the <em>T</em> domain and triplets of bytes in the <em>B</em> domain. All are raw binary primitives with pad size of 0 that each include 0 lead bytes.</t>
        </section>
        <section anchor="small-variable-raw-size-table-with-1-lead-byte" numbered="true" toc="default">
          <name>Small Variable Raw Size Table With 1 Lead Byte</name>
          <t>This table uses <tt>5</tt> as its first character or selector. The second character provides the type. The final two characters provide the size of the value in quadlets/triplets as a Base64 encoded integer. Only raw binaries with pad size of 1 are encoded with this table. The 1 character type code provides a total of 64 unique type code values. The maximum length of the value provided by the 2 size characters is 4095 quadlets of characters in the <em>T</em> domain and triplets of bytes in the <em>B</em> domain. All are raw binary primitives with pad size of 1 that each include 1 lead byte.</t>
        </section>
        <section anchor="small-variable-raw-size-table-with-2-lead-bytes" numbered="true" toc="default">
          <name>Small Variable Raw Size Table With 2 Lead Bytes</name>
          <t>This table uses <tt>6</tt> as its first character or selector. The second character provides the type. The final two characters provide the size of the value in quadlets/triplets as a Base64 encoded integer. Only raw binaries with pad size of 0 are encoded with this table. The 1 character type code provides a total of 64 unique type code values. The maximum length of the value provided by the 2 size characters is 4095 quadlets of characters in the <em>T</em> domain and triplets of bytes int the <em>B</em> domain. All are raw binary primitives with pad size of 2 that each include 2 lead bytes.</t>
        </section>
      </section>
      <section anchor="large-variable-raw-size-tables" numbered="true" toc="default">
        <name>Large Variable Raw Size Tables</name>
        <t>Many legacy cryptographic libraries such as OpenSSL and GPG support any sized  variable sized primitive for keys, signatures and digests. Although this approach is often criticized for providing too much flexibility, many legacy applications depend on this degree of flexibility. Consequently these large variable raw size tables provide a sufficiently expansive set of tables with enough types and sizes to accommodate all the legacy cryptographic libraries as well as all the variable sized raw primitives for the foreseeable future.</t>
        <t>The three tables in this group are for large variable raw size primitives. These three tables use 0, 1 or 2 Lead bytes as appropriate for the associated pad size of 0, 1 or 2 for a given variable sized raw binary value. The text code size for all three tables is 8 characters.
The first character is the selector, the next three characters provide the type, and the last four characters provide the size of the value as a Base64 encoded integer. With 3 characters for each unique type code, each table provides 262,144 unique type codes. This should be enough type codes to accommodate all fixed raw size primitive types for the foreseeable future.  A given type code is repeated in each table for the same type. What is different for each table is the number of lead bytes. The selector not only encodes the table but also implicitly encodes the number of lead bytes. The variable size is measured in quadlets of 4 characters each in the <em>T</em> domain and equivalently in triplets of 3 bytes each in the <em>B</em> domain. Thus computing the number of characters when parsing or off-loading in the <em>T</em> domain means multiplying the variable size by 4. Likewise computing the number of bytes when parsing or off-loading in the <em>B</em> domain means multiplying the variable size by 3. The four Base64 size characters provide value lengths in quadlets/triplets from 0 to 16,777,215 (<tt>64**4 -1</tt>). This corresponds to value lengths of up to 67,108,860 characters (<tt>16777215 * 4</tt>) or 50,331,645 bytes (<tt>16777215 * 3</tt>).</t>
        <section anchor="large-variable-raw-size-table-with-0-lead-bytes" numbered="true" toc="default">
          <name>Large Variable Raw Size Table With 0 Lead Bytes</name>
          <t>This table uses <tt>7</tt> as its first character or selector. The next three characters provide the type. The final four characters provide the size of the value in quadlets/triplets as a Base64 encoded integer. Only raw binaries with pad size of 0 are encoded with this table. The 3 character type code provides a total of 262,144 unique type code values. The maximum length of the value provided by the 4 size characters is 16,777,215 quadlets of characters in the <em>T</em> domain and triplets of bytes in the <em>B</em> domain. All are raw binary primitives with pad size of 0 that each include 0 lead bytes.</t>
        </section>
        <section anchor="large-variable-raw-size-table-with-1-lead-byte" numbered="true" toc="default">
          <name>Large Variable Raw Size Table With 1 Lead Byte</name>
          <t>This table uses <tt>8</tt> as its first character or selector. The next three characters provide the type. The final four characters provide the size of the value in quadlets/triplets as a Base64 encoded integer. Only raw binaries with pad size of 1 are encoded with this table. The 3 character type code provides a total of 262,144 unique type code values. The maximum length of the value provided by the 4 size characters is 16,777,215 quadlets of characters in the <em>T</em> domain and triplets of bytes in the <em>B</em> domain. All are raw binary primitives with pad size of 1 that each include 1 lead bytes.</t>
        </section>
        <section anchor="large-variable-raw-size-table-with-2-lead-bytes" numbered="true" toc="default">
          <name>Large Variable Raw Size Table With 2 Lead Bytes</name>
          <t>This table uses <tt>9</tt> as its first character or selector. The next three characters provide the type. The final four characters provide the size of the value in quadlets/triplets as a Base64 encoded integer. Only raw binaries with pad size of 2 are encoded with this table. The 3 character type code provides a total of 262,144 unique type code values. The maximum length of the value provided by the 4 size characters is 16,777,215 quadlets of characters in the <em>T</em> domain and triplets of bytes in the <em>B</em> domain. All are raw binary primitives with pad size of 2 that each include 2 lead bytes.</t>
        </section>
      </section>
      <section anchor="count-framing-code-tables" numbered="true" toc="default">
        <name>Count (Framing) Code Tables</name>
        <t>There may be as many at 13 count code tables, but only two are currently specified. These two are the small count, four character table and the large count, eight character table. Because count codes only count quadlets/triplets, primitives or groups of primitives, count codes have no value component, but only type and size components. Because primitives are already guaranteed to be composable count codes do not need to account for pad size as long as the count code itself is aligned on a 24 bit boundary. The count code type indicates the type of primitive being counted and the size indicates how many of that type. Both count code tables use the first two characters as a nested set of selectors. The first selector uses<tt>-</tt> as the initial selector for count codes. The next character is either a selector for another count code table or is the type for the small count code table. When the  second character is numeral <tt>0</tt> - <tt>9</tt> or the letters <tt>-</tt> or <tt>_</tt> then it is a secondary cound code table selector. When the second character is a letter in the range <tt>A</tt> - <tt>Z</tt> or <tt>a</tt> - <tt>z</tt> then it is a unique count code type. This given a total of 52 single character count code types.</t>
        <section anchor="small-count-code-table" numbered="true" toc="default">
          <name>Small Count Code Table</name>
          <t>Codes in the small count code table are each four characters long. The first character is the selector <tt>-</tt>. The second character is the count code type. the last two characters are the count size as a Base64 encoded integer. The count code type <bcp14>MUST</bcp14> be a letter <tt>A</tt> - <tt>Z</tt> or <tt>a</tt> - <tt>z</tt>. If the second character is not a letter but is a numeral <tt>0</tt> - <tt>9</tt> or <tt>-</tt> or <tt>_</tt> then it is a selector for a different count code table. The set of letters provide 52 unique count codes. A two character size provides counts from 0 to 4095 (<tt>64**2 - 1</tt>).</t>
        </section>
        <section anchor="large-count-code-table" numbered="true" toc="default">
          <name>Large Count Code Table</name>
          <t>Codes in the large count code table are each 8 characters long. The first two characters are the selectors <tt>-</tt>0. The next two characters are the count code type. the last four characters are the count size as a Base64 encoded integer. With two characters for type, there are 4096 unique large count code types. A four character size provides counts from 0 to 16,777,215 (<tt>64**4 - 1</tt>).</t>
        </section>
      </section>
      <section anchor="op-code-tables" numbered="true" toc="default">
        <name>Op Code Tables</name>
        <t>The <tt>_</tt> selector is reserved for the yet to be defined op code table or tables. Op codes are meant to provide stream processing instructions that are more general and flexible than simply concatenated primitives or groups of primitives.</t>
      </section>
      <section anchor="selector-codes-and-encoding-schemes" numbered="true" toc="default">
        <name>Selector Codes and Encoding Schemes</name>
        <t>The following table summarizes the <em>T</em> domain coding schemes for the 13 code tables defined above.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">Selector</th>
              <th align="center">Selector</th>
              <th align="center">Type Chars</th>
              <th align="center">Value Size Chars</th>
              <th align="center">Code Size</th>
              <th align="center">Lead Bytes</th>
              <th align="center">Pad Size</th>
              <th align="right">Format</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="right"> </td>
            </tr>
            <tr>
              <td align="center">
                <tt>[A-Z,a-z]</tt></td>
              <td align="center"> </td>
              <td align="center">1*</td>
              <td align="center">0</td>
              <td align="center">1</td>
              <td align="center">0</td>
              <td align="center">1</td>
              <td align="right">
                <tt>$&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>0</tt></td>
              <td align="center"> </td>
              <td align="center">1</td>
              <td align="center">0</td>
              <td align="center">2</td>
              <td align="center">0</td>
              <td align="center">2</td>
              <td align="right">
                <tt>0$&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>1</tt></td>
              <td align="center"> </td>
              <td align="center">3</td>
              <td align="center">0</td>
              <td align="center">4</td>
              <td align="center">0</td>
              <td align="center">0</td>
              <td align="right">
                <tt>1$$$&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>2</tt></td>
              <td align="center"> </td>
              <td align="center">3</td>
              <td align="center">0</td>
              <td align="center">4</td>
              <td align="center">1</td>
              <td align="center">1</td>
              <td align="right">
                <tt>2$$$&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>3 </tt></td>
              <td align="center"> </td>
              <td align="center">3</td>
              <td align="center">0</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">2</td>
              <td align="right">
                <tt>3$$$&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>4</tt></td>
              <td align="center"> </td>
              <td align="center">1</td>
              <td align="center">2</td>
              <td align="center">4</td>
              <td align="center">0</td>
              <td align="center">0</td>
              <td align="right">
                <tt>4$##&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>5</tt></td>
              <td align="center"> </td>
              <td align="center">1</td>
              <td align="center">2</td>
              <td align="center">4</td>
              <td align="center">1</td>
              <td align="center">1</td>
              <td align="right">
                <tt>5$##&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>6</tt></td>
              <td align="center"> </td>
              <td align="center">1</td>
              <td align="center">2</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">2</td>
              <td align="right">
                <tt>6$##&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>7</tt></td>
              <td align="center"> </td>
              <td align="center">3</td>
              <td align="center">4</td>
              <td align="center">8</td>
              <td align="center">0</td>
              <td align="center">0</td>
              <td align="right">
                <tt>7$$$####&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>8</tt></td>
              <td align="center"> </td>
              <td align="center">3</td>
              <td align="center">4</td>
              <td align="center">8</td>
              <td align="center">1</td>
              <td align="center">1</td>
              <td align="right">
                <tt>8$$$####&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>9</tt></td>
              <td align="center"> </td>
              <td align="center">3</td>
              <td align="center">4</td>
              <td align="center">8</td>
              <td align="center">2</td>
              <td align="center">2</td>
              <td align="right">
                <tt>9$$$####&amp;&amp;&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>-</tt></td>
              <td align="center">
                <tt>[A-Z,a-z]</tt></td>
              <td align="center">1*</td>
              <td align="center">0</td>
              <td align="center">4</td>
              <td align="center">0</td>
              <td align="center">0</td>
              <td align="right">
                <tt>-$##</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>-</tt></td>
              <td align="center">
                <tt>0</tt></td>
              <td align="center">2</td>
              <td align="center">0</td>
              <td align="center">8</td>
              <td align="center">0</td>
              <td align="center">0</td>
              <td align="right">
                <tt>-0$$####</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>_</tt></td>
              <td align="center"> </td>
              <td align="center">TBD</td>
              <td align="center">TBD</td>
              <td align="center">TBD</td>
              <td align="center">TBD</td>
              <td align="center">TBD</td>
              <td align="right">
                <tt>_</tt></td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="right"> </td>
            </tr>
          </tbody>
        </table>
        <t><tt>*</tt> selector character is also type character</t>
        <t>Character format symbol definitions:<br/>
          <tt>$</tt> means type code character from  subset of Base64  [A-Z,a-z,0-9,-,_]. <br/>
          <tt>#</tt> means a Base64 digit as part of a base 64 integer that determines the number of following quadlets or triplets in the primitive or when part of a count code, the count of following primitives or groups of primitives.<br/>
          <tt>&amp;</tt> represents one or more Base64 value characters representing the converted raw binary value included lead bytes when applicable. The actual number of chars is determined by the prep-ended text code.<br/>
          <tt>TBD</tt> means to be determined</t>
      </section>
      <section anchor="parse-size-table" numbered="true" toc="default">
        <name>Parse Size Table</name>
        <t>Text domain parsing can be simplified by using a parse size table. A text domain parser uses the first character selector code to look up the hard size (stable) portion of the text code. The parse then extracts hard size characters from the text stream. These characters form an index in to the parse size table which includes a set of sizes for the remainder of the primitive. Using these sizes for a given code allows a parser to extract and convert a given primitive. In the binary domian the same text parse table may be used but each size value represents a multiple of a sextet of bits instead of Base64 characters. Example entries from that table are provided below. Two of the rows may always be calculated given the other 4 rows so the table need only have 4 entries in each row. Thus all basic primitives may be parsed with one parse size table.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">selector</th>
              <th align="center">hs</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">
                <tt>B</tt></td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="center">
                <tt>0</tt></td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="center">
                <tt>5</tt></td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
          </tbody>
        </table>
        <table align="center">
          <thead>
            <tr>
              <th align="center">hard sized index</th>
              <th align="center">hs</th>
              <th align="center">ss</th>
              <th align="center">vs</th>
              <th align="center">fs</th>
              <th align="center">ls</th>
              <th align="center">ps</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">
                <tt>B</tt></td>
              <td align="center">1</td>
              <td align="center">0</td>
              <td align="center">43*</td>
              <td align="center">44</td>
              <td align="center">0</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="center">
                <tt>0B</tt></td>
              <td align="center">2</td>
              <td align="center">0</td>
              <td align="center">86*</td>
              <td align="center">88</td>
              <td align="center">0</td>
              <td align="center">2*</td>
            </tr>
            <tr>
              <td align="center">
                <tt>5A</tt></td>
              <td align="center">2</td>
              <td align="center">2</td>
              <td align="center">#</td>
              <td align="center">#</td>
              <td align="center">1</td>
              <td align="center">1*</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
          </tbody>
        </table>
        <t><tt>*</tt> size may be calculated from other sizes.<br/>
          <tt>#</tt> size may be calculated from extracted code characters given by other sizes.</t>
        <t><em>hs</em> means hard size in chars.<br/>
          <em>ss</em> means soft size in chars.<br/>
          <em>cs</em> means code size where <em>cs = hs + ss</em>.<br/>
          <em>vs</em> means value size in chars.<br/>
          <em>fs</em> means full size in chars where <em>fs = hs + ss + vs</em>.<br/>
          <em>ls</em> means lead size in bytes.<br/>
          <em>ps</em> means pad size in chars. <br/>
          <em>rs</em> means raw size in bytes of binary value.<br/>
          <em>bs</em> means binary size in bytes where <em>bs = as + rs</em>.</t>
      </section>
      <section anchor="special-context-specific-code-tables" numbered="true" toc="default">
        <name>Special Context Specific Code Tables</name>
        <t>The table above that provides the encoding schemes each with an associated code table that provides the type codes or  set of codes for each associated primitive type. These coding schemes constitute the basic set of code tables. This basic set may be extended with context specific code tables. The context in which a primitive occurs may provide an additional implicit selector that is not part of the actual explicit text code. This allows context specific coding schemes that would otherwise conflict with the basic code tables. Currently there is only one context specific coding scheme, that is, for indexed signatures. A common use case are thresholded multi-signature schemes. A threshold satisficing subset of signatures belonging to an ordered  or list of public keys may be provided as part of stream of primitives. One way to compactly associated each signature with its public key is to include in the text code for that signature the index into the ordered set of public keys. The typical raw binary size for signatures is 64 bytes which has a pad size of 2. This gives two code characters for a compact text code. The first character is the selector and type code. The second character is Base64 encoded integer index.  By using a similar dual selector type code character scheme as above, where the selectors are the numbers <tt>0</tt> -<tt>9</tt> and <tt>-</tt> and <tt>_</tt>. Then there are 52 type codes given by the letters <tt>A</tt> - <tt>Z</tt> and <tt>a</tt> - <tt>z</tt>. The index has 64 values which supports up to 64 members in the public key list. A selector can be used to select a large text code with more characters dedicated to larger indicies. Current only a small table is defined.</t>
        <t>A new signature scheme based on Ed448 with 114 byte signatures signatures is also supported. These signatures have a pad size of zero so require a four charactor text code. The first characters is the selector <tt>0</tt>, the second characters is the type with 64 values, the last two characters provide the index as a Base64 encoded integer with 4096 different values.</t>
        <t>The associate indexed schemes are provided in the following table.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">Selector</th>
              <th align="center">Selector</th>
              <th align="center">Type Chars</th>
              <th align="center">Index Chars</th>
              <th align="center">Code Size</th>
              <th align="center">Lead Bytes</th>
              <th align="center">Pad Size</th>
              <th align="right">Format</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="right"> </td>
            </tr>
            <tr>
              <td align="center">
                <tt>[A-Z,a-z]</tt></td>
              <td align="center"> </td>
              <td align="center">1*</td>
              <td align="center">1</td>
              <td align="center">2</td>
              <td align="center">0</td>
              <td align="center">2</td>
              <td align="right">
                <tt>$#&amp;&amp;</tt></td>
            </tr>
            <tr>
              <td align="center">
                <tt>0</tt></td>
              <td align="center"> </td>
              <td align="center">1</td>
              <td align="center">2</td>
              <td align="center">4</td>
              <td align="center">0</td>
              <td align="center">0</td>
              <td align="right">` 0$##&amp;&amp;&amp;&amp;`</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="right"> </td>
            </tr>
          </tbody>
        </table>
        <t><tt>*</tt> selector character is also type character</t>
        <t>Character format symbol definitions:<br/>
          <tt>$</tt> means type code character from  subset of Base64  [A-Z,a-z,0-9,-,_]. <br/>
          <tt>#</tt> means a Base64 digit as part of a base 64 integer that determines the index.<br/>
          <tt>&amp;</tt> represents one or more Base64 value characters representing the converted raw binary value included lead bytes when applicable. The actual number of chars is determined by the prep-ended text code.<br/>
          <tt>TBD</tt> means to be determined</t>
      </section>
    </section>
    <section anchor="master-code-table" numbered="true" toc="default">
      <name>Master Code Table</name>
      <section anchor="filling-code-table" numbered="true" toc="default">
        <name>Filling Code Table</name>
        <t>The approach to filling the tables is a first needed first served basis. In addition the requirement that all cryptographic operations maintain at least 128 bits of cryptographic strength precludes the entry of many weak cryptographic suites into the compact tables. CESR's compact code table includes only best-of-class cryptographic operations. In 2022 it is expected that NIST will approve standardized post-quantum resistant cryptographic signatures at which time codes for  the most appropriate post quantume signature suites will be added. Falcon appears to be the leader with open source code already available.</t>
      </section>
      <section anchor="description" numbered="true" toc="default">
        <name>Description</name>
        <t>This master table includes all three types of codes separated by headers. The table has 5 columns. These are as follows:</t>
        <t>1) The Base64 stable (hard) text code itself. 
2) A description of what is encoded or appended to the code.
3) The length in characters of the code.
4) the length in characters of the index or count portion of the code 
5) The length in characters of the fully qualified primitive including code and append material or number of elements in group.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">Code</th>
              <th align="left">Description</th>
              <th align="center">Code Length</th>
              <th align="center">Count or Index Length</th>
              <th align="center">Total Length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Basic One Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">A</td>
              <td align="left">Random seed of Ed25519 private key of length 256 bits</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">B</td>
              <td align="left">Ed25519 non-transferable prefix public signing verification key. Basic derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">C</td>
              <td align="left">X25519 public encryption key. May be converted from Ed25519 public signing verification key.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">D</td>
              <td align="left">Ed25519 public signing verification key. Basic derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">E</td>
              <td align="left">Blake3-256 Digest. Self-addressing derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">F</td>
              <td align="left">Blake2b-256 Digest. Self-addressing derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">G</td>
              <td align="left">Blake2s-256 Digest. Self-addressing derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">H</td>
              <td align="left">SHA3-256 Digest. Self-addressing derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">I</td>
              <td align="left">SHA2-256 Digest. Self-addressing derivation.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">J</td>
              <td align="left">Random seed of ECDSA secp256k1 private key of length 256 bits</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">44</td>
            </tr>
            <tr>
              <td align="center">K</td>
              <td align="left">Random seed of Ed448 private key of length 448 bits</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">76</td>
            </tr>
            <tr>
              <td align="center">L</td>
              <td align="left">X448 public encryption key. May be converted from Ed448 public signing verification key.</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">76</td>
            </tr>
            <tr>
              <td align="center">M</td>
              <td align="left">Short value of length 16 bits</td>
              <td align="center">1</td>
              <td align="center"> </td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Basic Two Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">0A</td>
              <td align="left">Random salt, seed, private key, or sequence number of length 128 bits</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">24</td>
            </tr>
            <tr>
              <td align="center">0B</td>
              <td align="left">Ed25519 signature. Self-signing derivation.</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">0C</td>
              <td align="left">ECDSA secp256k1 signature. Self-signing derivation.</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">0D</td>
              <td align="left">Blake3-512 Digest. Self-addressing derivation.</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">0E</td>
              <td align="left">Blake2b-512 Digest. Self-addressing derivation.</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">0F</td>
              <td align="left">SHA3-512 Digest. Self-addressing derivation.</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">0G</td>
              <td align="left">SHA2-512 Digest. Self-addressing derivation.</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">0H</td>
              <td align="left">Long value of length 32 bits</td>
              <td align="center">2</td>
              <td align="center"> </td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Basic Four Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">1AAA</td>
              <td align="left">ECDSA secp256k1 non-transferable prefix public signing verification key. Basic derivation.</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">48</td>
            </tr>
            <tr>
              <td align="center">1AAB</td>
              <td align="left">ECDSA secp256k1 public signing verification or encryption key. Basic derivation.</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">48</td>
            </tr>
            <tr>
              <td align="center">1AAC</td>
              <td align="left">Ed448 non-transferable prefix public signing verification key. Basic derivation.</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">80</td>
            </tr>
            <tr>
              <td align="center">1AAD</td>
              <td align="left">Ed448 public signing verification key. Basic derivation.</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">80</td>
            </tr>
            <tr>
              <td align="center">1AAE</td>
              <td align="left">Ed448 signature. Self-signing derivation.</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">156</td>
            </tr>
            <tr>
              <td align="center">1AAF</td>
              <td align="left">Tag Base64 4 chars or 3 byte number</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center">1AAG</td>
              <td align="left">DateTime Base64 custom encoded 32 char ISO-8601 DateTime</td>
              <td align="center">4</td>
              <td align="center"> </td>
              <td align="center">36</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Indexed Two Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">A#</td>
              <td align="left">Ed25519 indexed signature</td>
              <td align="center">2</td>
              <td align="center">1</td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center">B#</td>
              <td align="left">ECDSA secp256k1 indexed signature</td>
              <td align="center">2</td>
              <td align="center">1</td>
              <td align="center">88</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Indexed Four Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">0A##</td>
              <td align="left">Ed448 indexed signature</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">156</td>
            </tr>
            <tr>
              <td align="center">0B##</td>
              <td align="left">Label Base64 chars of variable length L=N*4 where N is value of index  total = L+4</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">Variable</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Counter Four Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">-A##</td>
              <td align="left">Count of attached qualified Base64 indexed controller signatures</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-B##</td>
              <td align="left">Count of attached qualified Base64 indexed witness signatures</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-C##</td>
              <td align="left">Count of attached qualified Base64 nontransferable identifier receipt couples  pre+sig</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-D##</td>
              <td align="left">Count of attached qualified Base64 transferable identifier receipt quadruples  pre+snu+dig+sig</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-E##</td>
              <td align="left">Count of attached qualified Base64 first seen replay couples fn+dt</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-F##</td>
              <td align="left">Count of attached qualified Base64 transferable indexed sig groups pre+snu+dig + idx sig group</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">-U##</td>
              <td align="left">Count of qualified Base64 groups or primitives in message data</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-V##</td>
              <td align="left">Count of total attached grouped material qualified Base64 4 char quadlets</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-W##</td>
              <td align="left">Count of total message data grouped material qualified Base64 4 char quadlets</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-X##</td>
              <td align="left">Count of total group message data plus attachments qualified Base64 4 char quadlets</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-Y##</td>
              <td align="left">Count of qualified Base64 groups or primitives in group. (context dependent)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-Z##</td>
              <td align="left">Count of grouped material qualified Base64 4 char quadlets (context dependent)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">-a##</td>
              <td align="left">Count of anchor seal groups in list  (anchor seal list) (a)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-c##</td>
              <td align="left">Count of config traits (each trait is 4 char quadlet   (configuration trait list) (c)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-d##</td>
              <td align="left">Count of digest seal Base64 4 char quadlets in digest  (digest seal  (d)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-e##</td>
              <td align="left">Count of event seal Base64 4 char quadlets in seal triple of (event seal) (i, s, d)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-k##</td>
              <td align="left">Count of keys in list  (key list) (k)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-l##</td>
              <td align="left">Count of locations seal Base64 4 char quadlets in seal quadruple of (location seal) (i, s, t, p)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-r##</td>
              <td align="left">Count of root digest seal Base64 4 char quadlets in root digest  (root digest) (rd)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">-w##</td>
              <td align="left">Count of witnesses in list  (witness list or witness remove list or witness add list) (w, wr, wa)</td>
              <td align="center">4</td>
              <td align="center">2</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left">
                <strong>Counter Eight Character Codes</strong></td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">-0U#####</td>
              <td align="left">Count of qualified Base64 groups or primitives in message data</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center">-0V#####</td>
              <td align="left">Count of total attached grouped material qualified Base64 4 char quadlets</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center">-0W#####</td>
              <td align="left">Count of total message data grouped material qualified Base64 4 char quadlets</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center">-0X#####</td>
              <td align="left">Count of total group message data plus attachments qualified Base64 4 char quadlets</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center">-0Y#####</td>
              <td align="left">Count of qualified Base64 groups or primitives in group (context dependent)</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center">-0Z#####</td>
              <td align="left">Count of grouped  material qualified Base64 4 char quadlets (context dependent)</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
            <tr>
              <td align="center"> </td>
              <td align="left"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
              <td align="center"> </td>
            </tr>
            <tr>
              <td align="center">-0a#####</td>
              <td align="left">Count of anchor seals  (seal groups in list)</td>
              <td align="center">8</td>
              <td align="center">5</td>
              <td align="center">8</td>
            </tr>
          </tbody>
        </table>
        <t>The table includes complex groups that are composed of other groups. For example consider the counter attachment group 
with code<tt>-F##</tt> where <tt>##</tt> is replaced by the two character Base64 count of the number of complex groups.<br/>
This is known as the TransIndexedSigGroups counter.  Within the complex group are one more more attached
groups where each group consists of a triple pre+snu+dig
followed by a ControllerIdxSigs group that in turn consists of a counter code <tt>-A##</tt> followed by one or more
indexed signature primitives. The following example details how this complex group may appear.</t>
        <t>The example has only one group. The example is annotated with comments, spaces and line feeds for clarity.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
-FAB     # Trans Indexed Sig Groups counter code 1 following group
E_T2_p83_gRSuAYvGhqV3S0JzYEF2dIa-OCPLbIhBO7Y    # trans prefix of signer for sigs
-EAB0AAAAAAAAAAAAAAAAAAAAAAB    # sequence number of est event of signer's public keys for sigs
EwmQtlcszNoEIDfqD-Zih3N6o5B3humRKvBBln2juTEM      # digest of est event of signer's public keys for sigs
-AAD     # Controller Indexed Sigs counter code 3 following sigs
AA5267UlFg1jHee4Dauht77SzGl8WUC_0oimYG5If3SdIOSzWM8Qs9SFajAilQcozXJVnbkY5stG_K4NbKdNB4AQ         # sig 0
ABBgeqntZW3Gu4HL0h3odYz6LaZ_SMfmITL-Btoq_7OZFe3L16jmOe49Ur108wH7mnBaq2E_0U0N0c5vgrJtDpAQ    # sig 1
ACTD7NDX93ZGTkZBBuSeSGsAQ7u0hngpNTZTK_Um7rUZGnLRNJvo5oOnnC1J2iBQHuxoq8PyjdT3BHS2LiPrs2Cg  # sig 2

]]></artwork>
      </section>
    </section>
    <section anchor="conventions-and-definitions" numbered="true" toc="default">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>None</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC4648" target="https://datatracker.ietf.org/doc/rfc4648/">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author initials="S." surname="Josefsson" fullname="Simon Josefsson">
              <organization/>
            </author>
            <date year="2020" month="January" day="21"/>
          </front>
        </reference>
        <reference anchor="RFC20" target="https://datatracker.ietf.org/doc/rfc20/">
          <front>
            <title>ASCII format for network interchange</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="July" day="29"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="KERI" target="https://arxiv.org/abs/1907.02143">
          <front>
            <title>Key Event Receipt Infrastructure (KERI)</title>
            <author initials="S." surname="Smith" fullname="Samuel M. Smith">
              <organization>ProSapien LLC</organization>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="JSON" target="https://www.json.org/json-en.html">
          <front>
            <title>JavaScript Object Notation Delimeters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC4627" target="https://datatracker.ietf.org/doc/rfc4627/">
          <front>
            <title>The application/json Media Type for JavaScript Object Notation (JSON)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CBOR" target="https://en.wikipedia.org/wiki/CBOR">
          <front>
            <title>CBOR Mapping Object Codes</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC8949" target="https://datatracker.ietf.org/doc/rfc8949/">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="Carsten Bormann">
              <organization/>
            </author>
            <author initials="P." surname="Hoffman" fullname="Paul Hoffman">
              <organization/>
            </author>
            <date year="2020" month="December" day="04"/>
          </front>
        </reference>
        <reference anchor="MGPK" target="https://github.com/msgpack/msgpack/blob/master/spec.md">
          <front>
            <title>Msgpack Mapping Object Codes</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BOM" target="https://en.wikipedia.org/wiki/Byte_order_mark">
          <front>
            <title>UTF Byte Order Mark</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DLog" target="https://en.wikipedia.org/wiki/Discrete_logarithm">
          <front>
            <title>Discrete Logarithm Problem</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NaCL" target="https://nacl.cr.yp.to">
          <front>
            <title>NaCl Networking and Cryptography library</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MultiCodec" target="https://github.com/multiformats/multicodec">
          <front>
            <title>MultiCodec Multiformats Codecs</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCTable" target="https://github.com/multiformats/multicodec/blob/master/table.csv">
          <front>
            <title>MultiCodec Table</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IPFS" target="https://richardschneider.github.io/net-ipfs-core/api/Ipfs.Registry.HashingAlgorithm.html">
          <front>
            <title>IPFS MultiFormats</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Base58Check" target="https://en.bitcoin.it/wiki/Base58Check_encoding">
          <front>
            <title>Base58Check Encoding</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="WIF" target="https://en.bitcoin.it/wiki/Wallet_import_format">
          <front>
            <title>Wallet Import Format ECDSA Base58Check</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Bin2Txt" target="https://en.wikipedia.org/wiki/Binary-to-text_encoding">
          <front>
            <title>Binary to Text Encoding</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ASCII" target="https://en.wikipedia.org/wiki/ASCII">
          <front>
            <title>Text Printable ASCII Characters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="UTF8" target="https://en.wikipedia.org/wiki/UTF-8">
          <front>
            <title>UTF-8 Unicode</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Latin1" target="https://en.wikipedia.org/wiki/ISO/IEC_8859-1">
          <front>
            <title>Latin-1 ISO 8859-1</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="STOMP" target="https://stomp.github.io">
          <front>
            <title>Simple Text Oriented Messaging Protocol</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RAET" target="https://github.com/RaetProtocol/raet">
          <front>
            <title>Reliable Asynchronous Event Transport</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Affinity" target="https://crd.lbl.gov/assets/Uploads/Nathan-NDM14.pdf">
          <front>
            <title>Analysis of the Effect of Core Affinity on High-Throughput Flows</title>
            <author>
              <organization/>
            </author>
            <date year="2014" month="November" day="16"/>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>The keripy development team, the KERI community and the ToIP ACDC working group.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
4k8AcxkoChz+e5+k14mpn3mBxgsxJZ/H42c8XQEZ3sIac5Kz5PXI13EmUkWN
/jF8tyE449mQGMyvEFZyzjQIjSinrCMNjhvn+YaUX80GxpPhB4DN3CXCmbAA
0xyvFfX6NKimkOoeWjV7ge5U5aI0qobr0iUkKknLrOswKsJ4wgVQCy7Hr3FC
5S4ofF+Swsx7GCxvM31F5dTfY+ZHkgAPLlzW9JT4LchkMyABriE3ieH1URQN
OelgMAkzvH6m0fjXv/7VaD0lny0WOqBFDYyDAFAX+OvK+OmoCRJMjeN3F913
s92td+Oz8/n+z1fPLn/7Yeu8/d3Hn4+fdocnYevl4avT/snlwcvHP/NIZPsy
HlfJE+b0Jfwzb7SO9w/a+7U/B9xDTXQRCoEs3dse/5Z7OcW2/+Pr6T+KySD/
+CI9Pjka/XbU+iW+3Hqxkz462LqcT8++vzo4mCTdX+cXx88DwY6ImXcbqMV+
XXzf0aVGcQm5Wwq51MH+/qPuzuPXk6fjzq/fRtH2UTi/LB4/Pv/4bLL74+vD
d+00nv787NHJaOt8ePLy/OOPz3f/kT85fxr+uh9P/jFIP/703Q9J//3Pj/Li
2bvvt1/0vx++ONje/4fleg/IrNhu7B8cjKPfkuKXH7eezbe/PW1fbqXDnz/u
nIa/vDt/PpqeXJy2Dor0t3ePX/7yNNo67ez8On0ZbT95nXXau9ffPp4mB+Fv
3eN37dftF+3Bo6tx9l1xNOOBeIxOY//w4ujxi6Ofnmz98uzi/S8HB/Pz6PxZ
vv+Px/P2ZTKevbj45eL7d6+nj7PXvzxLTs9efHeVPkpfJslh57tufPCPb+cf
0t92X938OrzYOvj2vHsav8ry7uHYjNBlkuYfwjiuEuk5uA+OXD4c7zNUyq7T
DPbFV1hC9asm/w5evKS/z47/8frk7PgI/z7/dv/01P7RkBbn3758fXrk/nJv
Hr58/vz4xRG/DE8D71Hjq+f7P3/FF/N89fLVxcnLF/unX9nLj4bpYE4MnzKc
KaEHU+gy2DBUXjlvcK5LnzNDDw5f/b//29kO/vnP/3X29LDb6Tz5r/+SD7ud
x9vwARPdeDRiJ/wRmPNNg/kO9kL5X+EsBokO2EdIl+8Aw0duDKxi4w1i5u1e
8L/7g1ln++/yACfsPTQ48x4SzqpPKi8zEmse1Qxjsek9L2Hah3f/Z++zwbt6
SGRzHg3myCDpei48jkMhmRfAhqnFyf6L/cq3F97KIetOUm4ZcglRzLBqtVpB
Pxy8x172B3ikTqLhmFh24597zMui4TdfjWARoq/+y5ApnHk3cIpcRZN0xhl7
UTjlHOXvj89OiO3PE4TZlN6+SE9eBfuHR4dI4O8tr95s/H8IaClBqzwBAA==

-->

</rfc>
