<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.20 (Ruby 3.0.2) -->
<?rfc strict="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-uuidrev-rfc4122bis-01" category="std" consensus="true" submissionType="IETF" obsoletes="4122" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="A UUID URN Namespace">A Universally Unique IDentifier (UUID) URN Namespace</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-uuidrev-rfc4122bis-01"/>
    <author initials="P." surname="Leach" fullname="P. Leach">
      <organization>Microsoft</organization>
      <address>
        <email>paulle@microsoft.com</email>
      </address>
    </author>
    <author initials="M." surname="Mealling" fullname="M. Mealling">
      <organization>VeriSign, Inc.</organization>
      <address>
        <email>michael@refactored-networks.com</email>
      </address>
    </author>
    <author initials="B. G." surname="Peabody" fullname="Brad G. Peabody">
      <organization/>
      <address>
        <email>brad@peabody.io</email>
      </address>
    </author>
    <author initials="K. R." surname="Davis" fullname="Kyzer R. Davis">
      <organization>Cisco Systems</organization>
      <address>
        <email>kydavis@cisco.com</email>
      </address>
    </author>
    <date year="2023"/>
    <area>ART</area>
    <workgroup>uuidrev</workgroup>
    <keyword>uuid</keyword>
    <abstract>
      <t>This specification defines a Uniform Resource Name namespace for
UUIDs (Universally Unique IDentifiers), also known as GUIDs (Globally
Unique IDentifiers).  A UUID is 128 bits long, and can guarantee
uniqueness across space and time.  UUIDs were originally used in the
Apollo Network Computing System and later in the Open Software
Foundation's (OSF) Distributed Computing Environment (DCE), and then
in Microsoft Windows platforms.</t>
      <t>This specification is derived from the DCE specification with the
kind permission of the OSF (now known as The Open Group).
Information from earlier versions of the DCE specification have been
incorporated into this document.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="Background">
      <name>Introduction</name>
      <t>This specification defines a Uniform Resource Name namespace for
UUIDs (Universally Unique IDentifiers), also known as GUIDs (Globally
Unique IDentifiers).  A UUID is 128 bits long, and requires no central
registration process.</t>
      <t>The information here is meant to be a concise guide for those wishing
to implement services using UUIDs as URNs <xref target="RFC8141"/>.  Nothing in this document
should be construed to override the DCE standards that defined UUIDs.</t>
      <t>There is an ITU-T Recommendation and an ISO/IEC Standard <xref target="X667"/> that are
derived from earlier versions of this document.  Both sets of
specifications have been aligned, and are fully technically
compatible.  In addition, a global registration function is being
provided by the Telecommunications Standardization Bureau of ITU-T;
for details see <eref target="https://www.itu.int/en/ITU-T/asn1/Pages/UUID/uuids.aspx"/>.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>One of the main reasons for using UUIDs is that no centralized
authority is required to administer them (although one format uses
IEEE 802 node identifiers, others do not).  As a result, generation
on demand can be completely automated, and used for a variety of
purposes.  The UUID generation algorithm described here supports very
high allocation rates of up to 10 million per second per machine if
necessary, so that they could even be used as transaction IDs.</t>
      <t>UUIDs are of a fixed size (128 bits), which is reasonably small
compared to other alternatives.  This lends itself well to sorting,
ordering, and hashing of all sorts, storing in databases, simple
allocation, and ease of programming in general.</t>
      <t>Since UUIDs are unique and persistent, they make excellent Uniform
Resource Names.  The unique ability to generate a new UUID without a
registration process allows for UUIDs to be one of the URNs with the
lowest minting cost.</t>
      <section anchor="update-motivation">
        <name>Update motivation</name>
        <t>Many things have changed in the time since UUIDs were originally created.
Modern applications have a need to create and utilize UUIDs as the primary
identifier for a variety of different items in complex computational systems,
including but not limited to database keys, file names, machine or system
names, and identifiers for event-driven transactions.</t>
        <t>One area in which UUIDs have gained popularity is as database keys.
This stems from the increasingly distributed nature of modern applications.
In such cases, "auto increment" schemes often used by databases do not work
well, as the effort required to coordinate sequential numeric identifiers across
a network can easily become a burden.
The fact that UUIDs can be used to create unique, reasonably short values
in distributed systems without requiring coordination makes them a good
alternative, but UUID versions 1-5 lack certain other desirable characteristics:</t>
        <ol spacing="normal" type="1"><li>Non-time-ordered UUID versions such as UUIDv4 <xref target="uuidv4"/> have poor database index
  locality.
  This means that new values created in succession are not close to each other in
  the index and thus require inserts to be performed at random
  locations.
  The negative performance effects of which on common structures used for
  this (B-tree and its variants) can be dramatic.</li>
          <li>The 100-nanosecond Gregorian epoch used in UUIDv1 <xref target="uuidv1"/> timestamps is uncommon
  and difficult to represent accurately using a standard number format such
  as <xref target="IEEE754"/>.</li>
          <li>Introspection/parsing is required to order by time sequence, as opposed to
  being able to perform a simple byte-by-byte comparison.</li>
          <li>Privacy and network security issues arise from using a MAC address in the
  node field of Version 1 UUIDs.
  Exposed MAC addresses can be used as an attack surface to locate machines
  and reveal various other
  information about such machines (minimally manufacturer, potentially other
  details). Additionally, with the advent of virtual machines and containers,
  MAC address uniqueness is no longer guaranteed.</li>
          <li>Many of the implementation details specified in RFC4122 involved trade
  offs that are neither possible to specify for all applications nor
  necessary to produce interoperable implementations.</li>
          <li>RFC4122 did not distinguish between the requirements for generation
  of a UUID versus an application which simply stores one, which are often
  different.</li>
        </ol>
        <t>Due to the aforementioned issues, many widely distributed database applications
and large application vendors have sought to solve the problem of creating
a better
time-based, sortable unique identifier for use as a database key. This has
lead to numerous implementations
over the past 10+ years solving the same problem in slightly different ways.</t>
        <t>While preparing this specification the following 16 different implementations
were analyzed for trends in total ID length, bit Layout, lexical formatting/encoding,
timestamp type, timestamp format, timestamp accuracy, node format/components,
collision handling and multi-timestamp tick generation sequencing.</t>
        <ol spacing="compact" type="1"><li>
            <xref target="ULID"/> by A. Feerasta</li>
          <li>
            <xref target="LexicalUUID"/> by Twitter</li>
          <li>
            <xref target="Snowflake"/> by Twitter</li>
          <li>
            <xref target="Flake"/> by Boundary</li>
          <li>
            <xref target="ShardingID"/> by Instagram</li>
          <li>
            <xref target="KSUID"/> by Segment</li>
          <li>
            <xref target="Elasticflake"/> by P. Pearcy</li>
          <li>
            <xref target="FlakeID"/> by T. Pawlak</li>
          <li>
            <xref target="Sonyflake"/> by Sony</li>
          <li>
            <xref target="orderedUuid"/> by IT. Cabrera</li>
          <li>
            <xref target="COMBGUID"/> by R. Tallent</li>
          <li>
            <xref target="SID"/> by A. Chilton</li>
          <li>
            <xref target="pushID"/> by Google</li>
          <li>
            <xref target="XID"/> by O. Poitrey</li>
          <li>
            <xref target="ObjectID"/> by MongoDB</li>
          <li>
            <xref target="CUID"/> by E. Elliott</li>
        </ol>
        <t>An inspection of these implementations and the issues described above has
led to this document which attempts to adapt UUIDs to address these issues.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <section anchor="requirements_language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
      <section anchor="acronyms">
        <name>Abbreviations</name>
        <t>The following abbreviations are used in this document:</t>
        <dl indent="14">
          <dt>UUID</dt>
          <dd>
            <t>Universally Unique Identifier</t>
          </dd>
          <dt>URN</dt>
          <dd>
            <t>Uniform Resource Names</t>
          </dd>
          <dt>ABNF</dt>
          <dd>
            <t>Augmented Backus-Naur Form</t>
          </dd>
          <dt>CSPRNG</dt>
          <dd>
            <t>Cryptographically Secure Pseudo-Random Number Generator</t>
          </dd>
          <dt>MAC</dt>
          <dd>
            <t>Media Access Control</t>
          </dd>
          <dt>MSB</dt>
          <dd>
            <t>Most Significant Bit</t>
          </dd>
          <dt>DBMS</dt>
          <dd>
            <t>Database Management System</t>
          </dd>
          <dt>IEEE</dt>
          <dd>
            <t>Institute of Electrical and Electronics Engineers, Inc.</t>
          </dd>
          <dt>ITU</dt>
          <dd>
            <t>International Telecommunication Union</t>
          </dd>
          <dt>MD5</dt>
          <dd>
            <t>Message Digest 5</t>
          </dd>
          <dt>SHA1</dt>
          <dd>
            <t>Secure Hash Algorithm 1</t>
          </dd>
          <dt>UTC</dt>
          <dd>
            <t>Coordinated Universal Time</t>
          </dd>
        </dl>
      </section>
      <section anchor="changelog" removeInRFC="true">
        <name>changelog</name>
        <t>draft-01</t>
        <ul spacing="compact">
          <li>Mixed Case Spelling error #18</li>
          <li>Add "UUIDs that Do Not Identify the Host as well" reference to security considerations #19</li>
          <li>Out of Place Distributed node text #20</li>
          <li>v6 clock_seq and node usage ambiguity #21</li>
          <li>Figure 2 and 3 Fix Title #22</li>
          <li>Move Namespace Registration Template to IANA Considerations #23</li>
          <li>Verify ABNF formatting against RFC5234 #24</li>
          <li>Bump ABNF reference to RFC 5234 #25</li>
          <li>Modify v8 <bcp14>SHOULD NOT</bcp14> to <bcp14>MUST NOT</bcp14> #27</li>
          <li>Remove "time-based" constraint from version 8 UUID #29</li>
          <li>Further clarify v7 field description #125 #30</li>
          <li>Typo: Section 4.2, Version Field, "UUID from in this" #33</li>
          <li>Create better ABNF to represent Hex Digit #39</li>
          <li>Break Binary form of UUID into two lines. #40</li>
          <li>Move octet text from section 4 to section 5 #41</li>
          <li>Add forward reference to UUIDv1 and UUIDv4 in Section 2 #42</li>
          <li>Erronous reference to v1 in monotonicity #45</li>
          <li>Add Label for "Monotonic Error Checking" paragraph to frame the topic #46</li>
          <li>Remove IEEE paragraph from "uuids that do not identify the host" #48</li>
          <li>Grammar Review #52</li>
        </ul>
        <t>draft-00</t>
        <ul spacing="compact">
          <li>Merge RFC4122 with draft-peabody-dispatch-new-uuid-format-04.md</li>
          <li>Change: Reference RFC1321 to RFC6151</li>
          <li>Change: Reference RFC2141 to RFC8141</li>
          <li>Change: Reference RFC2234 to RFC5234</li>
          <li>Change: Reference FIPS 180-1 to FIPS 180-4 for SHA1</li>
          <li>Change: Converted UUIDv1 to match UUIDv6 section from Draft 04</li>
          <li>Change: Trimmed down the ABNF representation</li>
          <li>Change: http websites to https equivalent</li>
          <li>Errata: Bad Reference to RFC1750 | 3641 #4</li>
          <li>Errata: Change MD5 website to example.com | 3476 #6 (Also Fixes Errata: Fix uuid_create_md5_from_name() | 1352 #2)</li>
          <li>Errata: Typo in code comment | 6665 #11</li>
          <li>Errata: Fix BAD OID acronym | 6225 #9</li>
          <li>Errata: Incorrect Parenthesis usage Section 4.3 | 184 #5</li>
          <li>Errata: Lexicographically Sorting Paragraph Fix | 1428 #3</li>
          <li>Errata: Fix 4.1.3 reference to the correct bits | 1957 #13</li>
          <li>Errata: Fix reference to variant in octet 8 | 4975 #7</li>
          <li>Errata: Further clarify 3rd/last bit of Variant for spec | 5560 #8</li>
          <li>Errata: Fix clock_seq_hi_and_reserved most-significant bit verbiage | 4976 #10</li>
          <li>Errata: Better Clarify network byte order when referencing most significant bits | 3546 #12</li>
          <li>Draft 05: B.2. Example of a UUIDv7 Value two "var" in table #120</li>
          <li>Draft 05: <bcp14>MUST</bcp14> veribage in Reliability of 6.1 #121</li>
          <li>Draft 05: Further discourage centralized registry for distributed UUID Generation.</li>
          <li>New: Further Clarity of exact octet and bit of var/ver in this spec</li>
          <li>New: Block diagram, bit layout, test vectors for UUIDv4</li>
          <li>New: Block diagram, bit layout, test vectors for UUIDv3</li>
          <li>New: Block diagram, bit layout, test vectors for UUIDv5</li>
          <li>New: Add MD5 Security Considerations reference, RFC6151</li>
          <li>New: Add SHA1 Security Considerations reference, RFC6194</li>
        </ul>
      </section>
    </section>
    <section anchor="format">
      <name>UUID Format</name>
      <t>The UUID format is 16 octets (128 bits); the variant bits in conjunction with the version
bits described in the next sections in determine finer structure. While discussing UUID formats and layout, bit definitions start at 0 and end at 127 while octets definitions start at 0 and end at 15.</t>
      <t>UUIDs <bcp14>MAY</bcp14> be represented as binary data or integers.
When in use with URNs or applications, any given UUID <bcp14>SHOULD</bcp14>
be represented by the "hex-and-dash" string format consisting of multiple
groups of upper or lowercase alphanumeric hex characters separated by single dashes/hyphens.
When used with databases please refer to <xref target="database_considerations"/>.</t>
      <t>The formal definition of the UUID string representation is provided by the following (ABNF) <xref target="RFC5234"/>.</t>
      <sourcecode type="abnf"><![CDATA[
   UUID     = 4hexOctet "-"
              2hexOctet "-"
              2hexOctet "-"
              2hexOctet "-"
              6hexOctet
   hexOctet = HEXDIG HEXDIG
   DIGIT    = %x30-39
   HEXDIG   = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
]]></sourcecode>
      <t>An example UUID using this textual representation from the previous table observed in <xref target="sampleStringUUID"/>.
Note that in this example the alphabetic characters may be all uppercase, all lowercase or mixed case as per <xref section="2.3" sectionFormat="comma" target="RFC5234"/></t>
      <figure anchor="sampleStringUUID">
        <name>Example String UUID format</name>
        <artwork><![CDATA[
f81d4fae-7dec-11d0-a765-00a0c91e6bf6
]]></artwork>
      </figure>
      <t>The same UUID from <xref target="sampleStringUUID"/> is represented in Binary <xref target="sampleBinaryUUID"/>, Integer <xref target="sampleIntegerUUID"/> and as a URN <xref target="sampleURNUUID"/> defined by <xref target="RFC8141"/>.</t>
      <figure anchor="sampleBinaryUUID">
        <name>Example Binary UUID</name>
        <artwork><![CDATA[
111110000001110101001111101011100111110111101100000100011101000\
01010011101100101000000001010000011001001000111100110101111110110
]]></artwork>
      </figure>
      <figure anchor="sampleIntegerUUID">
        <name>Example Integer UUID</name>
        <artwork><![CDATA[
329800735698586629295641978511506172918
]]></artwork>
      </figure>
      <figure anchor="sampleURNUUID">
        <name>Example URN UUID</name>
        <artwork><![CDATA[
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
]]></artwork>
      </figure>
      <section anchor="variant_field">
        <name>Variant Field</name>
        <t>The variant field determines the layout of the UUID.  That is, the
interpretation of all other bits in the UUID depends on the setting
of the bits in the variant field.  As such, it could more accurately
be called a type field; we retain the original term for
compatibility.  The variant field consists of a variable number of
the most significant bits of octet 8 of the UUID.</t>
        <t><xref target="table1"/> lists the contents of the variant field, where
the letter "x" indicates a "don't-care" value.</t>
        <table anchor="table1">
          <name>UUID Variants</name>
          <thead>
            <tr>
              <th align="left">Msb0</th>
              <th align="left">Msb1</th>
              <th align="left">Msb2</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">Reserved, NCS backward compatibility.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">x</td>
              <td align="left">The variant specified in this document.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">Reserved, Microsoft Corporation backward compatibility</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
          </tbody>
        </table>
        <t>Interoperability, in any form, with variants other than the one
defined here is not guaranteed, and is not likely to be an issue in
practice.</t>
        <t>Specifically for UUIDs in this document bits 64 and 65 of the UUID (bits 0 and 1 of octet 8) <bcp14>MUST</bcp14> be set to 1 and 0 as specified in row 2 of <xref target="table1"/>.
Accordingly, all bit and field layouts avoid the use of these bits.</t>
      </section>
      <section anchor="version_field">
        <name>Version Field</name>
        <t>The version number is in the most significant 4 bits of octet 6
(bits 48 through 51 of the UUID).</t>
        <t><xref target="table2"/> lists all of the versions for this UUID variant specified in this document.</t>
        <table anchor="table2">
          <name>UUID variant 10x versions defined by this specification</name>
          <thead>
            <tr>
              <th align="left">Msb0</th>
              <th align="left">Msb1</th>
              <th align="left">Msb2</th>
              <th align="left">Msb3</th>
              <th align="left">Version</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">Unused</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">The Gregorian time-based UUID specified in this document.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">2</td>
              <td align="left">Reserved for DCE Security version, with embedded POSIX UUIDs.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">3</td>
              <td align="left">The name-based version specified in this document that uses MD5 hashing.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">4</td>
              <td align="left">The randomly or pseudo-randomly generated version specified in this document.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">5</td>
              <td align="left">The name-based version specified in this document that uses SHA-1 hashing.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">6</td>
              <td align="left">Reordered Gregorian time-based UUID specified in this document.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">7</td>
              <td align="left">Unix Epoch time-based UUID specified in this document.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">8</td>
              <td align="left">Reserved for custom UUID formats specified in this document.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">9</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">10</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">11</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">12</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">13</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">14</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">15</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
          </tbody>
        </table>
        <t>An example version/variant layout for UUIDv4 follows the table
where M represents the version placement for the hex representation of 4 (0100)
and the N represents the variant placement for one of the four possible hex representation of variant 10x:
8 (1000), 9 (1001), A (1010), B (1011)</t>
        <figure>
          <name>UUIDv4 Variant Examples</name>
          <artwork><![CDATA[
00000000-0000-4000-8000-000000000000
00000000-0000-4000-9000-000000000000
00000000-0000-4000-A000-000000000000
00000000-0000-4000-B000-000000000000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="layout">
      <name>UUID Layouts</name>
      <t>To minimize confusion about bit assignments within octets and among differing versions,
the UUID record definition is defined only in terms of fields that are
integral numbers of octets.  The fields are presented with the most
significant one first.</t>
      <t>In the absence of explicit application or presentation protocol
specification to the contrary, each field is encoded with the Most
Significant Byte first (known as network byte order).</t>
      <t>Note that in some instances the field names, particularly for multiplexed fields, follow historical
practice.</t>
      <section anchor="uuidv1">
        <name>UUID Version 1</name>
        <t>UUID Version 1 is a time-based UUID featuring a 60-bit timestamp
represented by Coordinated Universal Time (UTC) as a count of 100-
nanosecond intervals since 00:00:00.00, 15 October 1582 (the date of
Gregorian reform to the Christian calendar).</t>
        <t>UUID Version 1 also features a clock sequence field which is used to help avoid
duplicates that could arise when the clock is set backwards in time
or if the node ID changes.</t>
        <t>The node field consists of an IEEE 802 MAC
address, usually the host address.  For systems with multiple IEEE
802 addresses, any available one can be used.  The lowest addressed
octet (octet number 10) contains the global/local bit and the
unicast/multicast bit, and is the first octet of the address
transmitted on an 802.3 LAN.</t>
        <figure>
          <name>UUIDv1 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          time_low                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       time_mid                |         time_hi_and_version   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         node (2-5)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>time_low:</dt>
          <dd>
            <t>The least significant 32 bits of the 60 bit starting timestamp.
Occupies bits 0 through 31 (octets 0-3)</t>
          </dd>
          <dt>time_mid:</dt>
          <dd>
            <t>The middle 16 bits of the 60 bit starting timestamp.
Occupies bits 32 through 47 (octets 4-5)</t>
          </dd>
          <dt>time_hi_and_version:</dt>
          <dd>
            <t>The first four most significant bits <bcp14>MUST</bcp14> contain
the UUIDv1 version (0001) while the remaining 12 bits will contain
the most significant 12 bits from the 60 bit starting timestamp.
Occupies bits 48 through 63 (octets 6-7)</t>
          </dd>
          <dt>clock_seq_hi_and_res:</dt>
          <dd>
            <t>The first two bits <bcp14>MUST</bcp14> be set to the UUID variant (10)
The remaining 6 bits contain the high portion of the clock sequence.
Occupies bits 64 through 71 (octet 8) for a full 8 bits.</t>
          </dd>
          <dt>clock_seq_low:</dt>
          <dd>
            <t>The 8 bit low portion of the clock sequence.
Occupies bits 72 through 79 (octet 9)</t>
          </dd>
          <dt>node:</dt>
          <dd>
            <t>48 bit spatially unique identifier
Occupies bits 80 through 127 (octets 10-15)</t>
          </dd>
        </dl>
        <t>For systems that do not have UTC available, but do have the local
time, they may use that instead of UTC, as long as they do so
consistently throughout the system.  However, this is not recommended
since generating the UTC from local time only needs a time zone
offset.</t>
        <t>If the clock is set backwards, or might have been set backwards
(e.g., while the system was powered off), and the UUID generator can
not be sure that no UUIDs were generated with timestamps larger than
the value to which the clock was set, then the clock sequence has to
be changed.  If the previous value of the clock sequence is known, it
can just be incremented; otherwise it should be set to a random or
high-quality pseudo-random value.</t>
        <t>Similarly, if the node ID changes (e.g., because a network card has
been moved between machines), setting the clock sequence to a random
number minimizes the probability of a duplicate due to slight
differences in the clock settings of the machines.  If the value of
clock sequence associated with the changed node ID were known, then
the clock sequence could just be incremented, but that is unlikely.</t>
        <t>The clock sequence <bcp14>MUST</bcp14> be originally (i.e., once in the lifetime of
a system) initialized to a random number to minimize the correlation
across systems.  This provides maximum protection against node
identifiers that may move or switch from system to system rapidly.
The initial value <bcp14>MUST NOT</bcp14> be correlated to the node identifier.</t>
        <t>For systems with no IEEE address, a randomly or pseudo-randomly
generated value may be used; see <xref target="unguessability"/> and <xref target="unidentifiable"/>.</t>
      </section>
      <section anchor="uuidv2">
        <name>UUID Version 2</name>
        <t>UUID Version 2 is known as DCE Security UUIDs <xref target="C309"/> and <xref target="C311"/>.
As such the definition of these UUIDs are outside the scope of this specification.</t>
      </section>
      <section anchor="uuidv3">
        <name>UUID Version 3</name>
        <t>UUID Version 3 is meant for generating UUIDs from "names"
that are drawn from, and unique within, some "name space" as per <xref target="name_based_uuid_generation"/>.</t>
        <t>UUIDv3 values are created by computing an MD5 <xref target="RFC1321"/>
hash over a given name space value concatenated with the desired name value
after both have been converted to a canonical sequence of octets in network byte order.
This MD5 value is then used to populate all 128 bits of the UUID layout.
The UUID version and variant then replace the respective bits as defined by <xref target="version_field"/> and <xref target="variant_field"/>.</t>
        <t>Some common name space values have been defined via <xref target="namespaces"/>.</t>
        <t>Where possible UUIDv5 <bcp14>SHOULD</bcp14> be used in lieu of UUIDv3.
For more information on MD5 security considerations see <xref target="RFC6151"/>.</t>
        <figure>
          <name>UUIDv3 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            md5_high                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          md5_high             |  ver  |       md5_mid         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                        md5_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            md5_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>md5_high:</dt>
          <dd>
            <t>The first 48 bits of the layout are filled
with the most significant, left-most 48 bits
from the computed MD5 value.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/> set to 0011</t>
          </dd>
          <dt>md5_mid:</dt>
          <dd>
            <t>12 more bits of the layout consisting of the least significant,
right-most 12 bits of 16 bits immediately following md5_high
from the computed MD5 value.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/> set to 10</t>
          </dd>
          <dt>md5_low:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled with the least-significant, right-most bits of the final 64 bits
from the computed MD5 value.</t>
          </dd>
        </dl>
        <t>For more information on MD5 security considerations see <xref target="RFC6194"/>.</t>
      </section>
      <section anchor="uuidv4">
        <name>UUID Version 4</name>
        <t>The version 4 UUID is meant for generating UUIDs from truly-random or
pseudo-random numbers.</t>
        <t>An implementation may generate 128 bits of random random data which is
used to fill out the UUID fields in <xref target="uuidv4fields"/>. The UUID version
and variant then replace the respective bits as defined by <xref target="version_field"/>
and <xref target="variant_field"/>,</t>
        <t>Alternatively, an implementation <bcp14>MAY</bcp14> choose to randomly generate the exact required number of bits for
for random_a, random_b, and random_c then concatenate the version and variant in the required position.</t>
        <t>For guidelines on random data generation see <xref target="unguessability"/>.</t>
        <figure anchor="uuidv4fields">
          <name>UUIDv4 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           random_a                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          random_a             |  ver  |       random_b        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                       random_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           random_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>random_a:</dt>
          <dd>
            <t>The first 48 bits of the layout that can be filled with random data as specified in <xref target="unguessability"/></t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/> set to 0100</t>
          </dd>
          <dt>random_b:</dt>
          <dd>
            <t>12 more bits of the layout that can be filled random data as per <xref target="unguessability"/></t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/> set to 10</t>
          </dd>
          <dt>random_c:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled with random data as per <xref target="unguessability"/></t>
          </dd>
        </dl>
      </section>
      <section anchor="uuidv5">
        <name>UUID Version 5</name>
        <t>UUID Version 5 is meant for generating UUIDs from "names"
that are drawn from, and unique within, some "name space" as per <xref target="name_based_uuid_generation"/>.</t>
        <t>UUIDv5 values are created by computing an SHA1 <xref target="SHA1"/>
hash over a given name space value concatenated with the desired name value
after both have been converted to a canonical sequence of octets in network byte order.
This SHA1 value is then used to populate all 128 bits of the UUID layout. Excess bits beyond 128 are discarded.
The UUID version and variant then replace the respective bits as defined by <xref target="version_field"/> and <xref target="variant_field"/></t>
        <t>Some common name space values have been defined via <xref target="namespaces"/>.</t>
        <t>For more information on SHA1 security considerations see <xref target="RFC6194"/>.</t>
        <figure>
          <name>UUIDv5 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           sha1_high                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         sha1_high             |  ver  |      sha1_mid         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                       sha1_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           sha1_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>sha1_high:</dt>
          <dd>
            <t>The first 48 bits of the layout are filled
with the most significant, left-most 48 bits
from the computed SHA1 value.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/></t>
          </dd>
          <dt>sha1_mid:</dt>
          <dd>
            <t>12 more bits of the layout consisting of the least significant,
right-most 12 bits of 16 bits immediately following md5_high
from the computed SHA1 value.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/>.</t>
          </dd>
          <dt>sha1_low:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled by skipping the 2 most significant, left-most bits of the remaining SHA1 hash
and then using the next 62 most significant, left-most bits.
Any leftover SHA1 bits are discarded and unused.</t>
          </dd>
        </dl>
      </section>
      <section anchor="uuidv6">
        <name>UUID Version 6</name>
        <t>UUID version 6 is a field-compatible version of UUIDv1, reordered for improved
DB locality.
It is expected that UUIDv6 will primarily be used in contexts where there
are existing v1 UUIDs.
Systems that do not involve legacy UUIDv1 <bcp14>SHOULD</bcp14> use UUIDv7 instead.</t>
        <t>Instead of splitting the timestamp into the low, mid and high sections from
UUIDv1, UUIDv6 changes this sequence so timestamp bytes are stored from most
to least significant.
That is, given a 60 bit timestamp value as specified for UUIDv1 in <xref target="uuidv1"/>,
for UUIDv6, the first 48 most significant bits are stored
first, followed by the 4 bit version (same position), followed by the remaining
12 bits of the original 60 bit timestamp.</t>
        <t>The clock sequence bits remain unchanged from their usage and position in <xref target="uuidv1"/>.</t>
        <t>The clock sequence and node bits <bcp14>SHOULD</bcp14> be reset to a pseudo-random value for each new UUIDv6 generated; however, implementations <bcp14>MAY</bcp14> choose to retain the old MAC address behavior from <xref target="uuidv1"/>. For more information on MAC address usage within UUIDs see the <xref target="Security"/>.</t>
        <t>The format for the 16-byte, 128 bit UUIDv6 is shown in <xref target="v6layout"/></t>
        <figure anchor="v6layout">
          <name>UUIDv6 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           time_high                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           time_mid            |      time_low_and_version     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         node (2-5)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>time_high:</dt>
          <dd>
            <t>The most significant 32 bits of the 60 bit starting timestamp.
Occupies bits 0 through 31 (octets 0-3)</t>
          </dd>
          <dt>time_mid:</dt>
          <dd>
            <t>The middle 16 bits of the 60 bit starting timestamp.
Occupies bits 32 through 47 (octets 4-5)</t>
          </dd>
          <dt>time_low_and_version:</dt>
          <dd>
            <t>The first four most significant bits <bcp14>MUST</bcp14> contain
the UUIDv6 version (0110) while the remaining 12 bits will contain
the least significant 12 bits from the 60 bit starting timestamp.
Occupies bits 48 through 63 (octets 6-7)</t>
          </dd>
          <dt>clk_seq_hi_res:</dt>
          <dd>
            <t>The first two bits <bcp14>MUST</bcp14> be set to the UUID variant (10)
The remaining 6 bits contain the high portion of the clock sequence.
Occupies bits 64 through 71 (octet 8) for a full 8 bits.</t>
          </dd>
          <dt>clock_seq_low:</dt>
          <dd>
            <t>The 8 bit low portion of the clock sequence.
Occupies bits 72 through 79 (octet 9)</t>
          </dd>
          <dt>node:</dt>
          <dd>
            <t>48 bit spatially unique identifier
Occupies bits 80 through 127 (octets 10-15)</t>
          </dd>
        </dl>
        <t>With UUIDv6 the steps for splitting the timestamp into time_high and time_mid
are <bcp14>OPTIONAL</bcp14>
since the 48 bits of time_high and time_mid will remain in the same order.
An extra step of splitting the first 48 bits of the timestamp into the most
significant
32 bits and least significant 16 bits proves useful when reusing an existing
UUIDv1 implementation.</t>
      </section>
      <section anchor="v7">
        <name>UUID Version 7</name>
        <t>UUID version 7 features a time-ordered value field derived from the widely
implemented and well known Unix Epoch timestamp source, the number of milliseconds
seconds since midnight 1 Jan 1970 UTC, leap seconds excluded.
UUID verion 7 also has improved entropy characteristics over versions 1 or 6.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> utilize UUID version 7 instead of UUID version 1 and 6 if
possible.</t>
        <figure>
          <name>UUIDv7 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           unix_ts_ms                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          unix_ts_ms           |  ver  |       rand_a          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                        rand_b                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            rand_b                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>unix_ts_ms:</dt>
          <dd>
            <t>48 bit big-endian unsigned number of Unix epoch timestamp in milliseconds as per <xref target="timestamp_considerations"/>.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>4 bit UUIDv7 version set as per <xref target="version_field"/></t>
          </dd>
          <dt>rand_a:</dt>
          <dd>
            <t>12 bits pseudo-random data to provide uniqueness as per <xref target="unguessability"/> and/or an optional counter to guarantee additional monotonicity as per <xref target="monotonicity_counters"/>.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant defined by <xref target="variant_field"/>.</t>
          </dd>
          <dt>rand_b:</dt>
          <dd>
            <t>The final 62 bits of pseudo-random data to provide uniqueness as per <xref target="unguessability"/> and/or an optional counter to guarantee additional monotonicity as per <xref target="monotonicity_counters"/>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="v8">
        <name>UUID Version 8</name>
        <t>UUID version 8 provides an RFC-compatible format for experimental or vendor-specific
use cases.
The only requirement is that the variant and version bits <bcp14>MUST</bcp14> be set as
defined in <xref target="variant_field"/> and <xref target="version_field"/>.
UUIDv8's uniqueness will be implementation-specific and <bcp14>MUST NOT</bcp14> be assumed.</t>
        <t>The only explicitly defined bits are the Version and Variant leaving 122
bits
for implementation specific UUIDs. To be clear:
UUIDv8 is not a replacement for UUIDv4 where all 122 extra bits are
filled with random data.</t>
        <t>Some example situations in which UUIDv8 usage could occur:</t>
        <ul spacing="normal">
          <li>An implementation would like to embed extra information
within the UUID other than what is defined in this document.</li>
          <li>An implementation has other application/language restrictions which
inhibit the use of one of the current UUIDs.</li>
        </ul>
        <figure>
          <name>UUIDv8 Field and Bit Layout</name>
          <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           custom_a                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          custom_a             |  ver  |       custom_b        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                       custom_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           custom_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>custom_a:</dt>
          <dd>
            <t>The first 48 bits of the layout that can be filled as an implementation sees
fit.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/></t>
          </dd>
          <dt>custom_b:</dt>
          <dd>
            <t>12 more bits of the layout that can be filled as an implementation sees fit.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/>.</t>
          </dd>
          <dt>custom_c:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled as an implementation sees fit.</t>
          </dd>
        </dl>
      </section>
      <section anchor="niluuid">
        <name>Nil UUID</name>
        <t>The nil UUID is special form of UUID that is specified to have all
128 bits set to zero.</t>
        <figure>
          <name>Nil UUID Format</name>
          <artwork><![CDATA[
00000000-0000-0000-0000-000000000000
]]></artwork>
        </figure>
      </section>
      <section anchor="maxuuid">
        <name>Max UUID</name>
        <t>The Max UUID is special form of UUID that is specified to have all 128 bits
set to 1. This UUID can be thought of as the inverse of Nil UUID defined
in <xref target="niluuid"/>.</t>
        <figure>
          <name>Max UUID Format</name>
          <artwork><![CDATA[
FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="uuid_best_practices">
      <name>UUID Best Practices</name>
      <t>The minimum requirements for generating UUIDs are
described in this document for each version.
Everything else is an implementation detail and
up to the implementer to decide what is appropriate for a given
implementation. Various relevant factors are covered
below to help guide an implementer through the different trade-offs among
differing UUID implementations.</t>
      <section anchor="timestamp_considerations">
        <name>Timestamp Considerations</name>
        <t>UUID timestamp source, precision and length was the topic of great debate
while creating UUIDv7 for this specification. Choosing the right timestamp for
your application is a very important topic. This section will detail some
of the most common points on this topic.</t>
        <dl newline="true">
          <dt>Reliability:</dt>
          <dd>
            <t>Implementations <bcp14>SHOULD</bcp14> use the current timestamp from a reliable source to
provide values that are time-ordered and continually increasing.
Care <bcp14>SHOULD</bcp14> be taken to ensure that timestamp changes from the environment
or operating system are handled in a way that is consistent with implementation
requirements.
For example, if it is possible for the system clock to move backward due
to either manual adjustment or corrections from a time synchronization protocol,
implementations need to determine how to handle such cases. (See Altering, Fuzzing,
or Smearing bullet below.)</t>
          </dd>
          <dt>Source:</dt>
          <dd>
            <t>UUID version 1 and 6 both utilize a Gregorian epoch timestamp while UUIDv7
utilizes a Unix Epoch timestamp. If other timestamp sources or a custom timestamp
epoch are required UUIDv8 <bcp14>SHOULD</bcp14> be used.</t>
          </dd>
          <dt>Sub-second Precision and Accuracy:</dt>
          <dd>
            <t>Many levels of precision exist for timestamps: milliseconds, microseconds,
nanoseconds, and beyond.
Additionally fractional representations of sub-second precision may be desired
to mix various levels of precision in a time-ordered manner.
Furthermore, system clocks themselves have an underlying granularity and
it is frequently less than the precision offered by the operating system.
With UUID version 1 and 6, 100-nanoseconds of precision are present while
UUIDv7 features fixed millisecond level of precision within the Unix epoch
that does not exceed the granularity capable in most modern systems.
For other levels of precision UUIDv8 <bcp14>SHOULD</bcp14> be utilized.
Similar to <xref target="monotonicity_counters"/>, with UUIDv1 or UUIDv6,
a high resolution timestamp can be simulated by keeping a count of
the number of UUIDs that have been generated with the same value of
the system time, and using it to construct the low order bits of the
timestamp.  The count will range between zero and the number of
100-nanosecond intervals per system time interval.</t>
          </dd>
          <dt>Length:</dt>
          <dd>
            <t>The length of a given timestamp directly impacts how long a given UUID will
be valid.
That is, how many timestamp ticks can be contained in a UUID before the maximum
value for the timestamp field is reached.
Care should be given to ensure that the proper length is selected for a given
timestamp.
UUID version 1 and 6 utilize a 60 bit timestamp and UUIDv7 features a 48
bit timestamp.</t>
          </dd>
          <dt>Altering, Fuzzing, or Smearing:</dt>
          <dd>
            <t>Implementations <bcp14>MAY</bcp14> alter the actual timestamp. Some examples include security
considerations around providing a real clock value within a UUID, to correct
inaccurate clocks, or to handle leap seconds. This specification makes no
requirement or guarantee about how close the clock value needs to be to the actual
time.
If UUIDs do not need to be frequently generated, the UUIDv1 or UUIDv6 timestamp can
simply be the system time multiplied by the number of 100-nanosecond
intervals per system time interval.</t>
          </dd>
          <dt>Padding:</dt>
          <dd>
            <t>When timestamp padding is required, implementations <bcp14>MUST</bcp14> pad the most significant
bits (left-most) bits with zeros. An example is padding the most significant,
left-most bits of a 32 bit Unix timestamp with zeros to fill out the 48
bit timestamp in UUIDv7.</t>
          </dd>
          <dt>Truncating:</dt>
          <dd>
            <t>When timestamps need to be truncated, the lower, least significant
bits <bcp14>MUST</bcp14> be used. An example would be truncating a 64 bit Unix timestamp
to the least significant, right-most 48 bits for UUIDv7.</t>
          </dd>
          <dt>Error Handling:</dt>
          <dd>
            <t>If a system overruns the generator by requesting too many UUIDs
within a single system time interval, the UUID service <bcp14>MUST</bcp14> either
return an error, or stall the UUID generator until the system clock
catches up.
Note that if the processors overrun the UUID generation frequently,
additional node identifiers can be allocated to the system, which
will permit higher speed allocation by making multiple UUIDs
potentially available for each time stamp value.
Similar techniques are discussed in <xref target="distributed_shared_knowledge"/>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="monotonicity_counters">
        <name>Monotonicity and Counters</name>
        <t>Monotonicity is the backbone of time-based sortable UUIDs. Normally, time-based
UUIDs from this document will be monotonic due to an embedded timestamp; however,
implementations can guarantee additional monotonicity via the concepts covered
in this section.</t>
        <t>Care <bcp14>SHOULD</bcp14> be taken to ensure UUIDs generated in batches are
also monotonic. That is, if one thousand UUIDs are generated for the same
timestamp, there <bcp14>SHOULD</bcp14> be sufficient logic for organizing the creation order of
those one thousand UUIDs.
Batch UUID creation implementations <bcp14>MAY</bcp14> utilize a monotonic counter that
<bcp14>SHOULD</bcp14> increment for each UUID created during a given timestamp.</t>
        <t>For single-node UUID implementations that do not need to create batches of
UUIDs, the embedded timestamp within UUID version 6 and 7 can provide
sufficient monotonicity guarantees by simply ensuring that timestamp increments
before creating a new UUID. Distributed nodes are discussed in
<xref target="distributed_shared_knowledge"/>.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> choose one method for single-node UUID implementations
that require batch UUID creation.</t>
        <dl newline="true">
          <dt>Fixed-Length Dedicated Counter Bits (Method 1):</dt>
          <dd>
            <t>Some implementations allocate a specific number of bits in the
UUID layout to the sole purpose of tallying the total number of UUIDs created
during a given UUID timestamp tick.
A fixed bit-length counter, if present, <bcp14>SHOULD</bcp14> be positioned immediately after the
embedded timestamp. This promotes sortability and allows random data generation
for each counter increment.
With this method, the rand_a section of UUIDv7 <bcp14>SHOULD</bcp14> be used as fixed-length
dedicated counter bits that are incremented by one for every UUID generation.
The trailing random bits generated for each new UUID in rand_b can help produce
unguessable UUIDs. In the event more counter bits are required, the most significant
(left-most) bits of rand_b <bcp14>MAY</bcp14> be used as additional counter bits.</t>
          </dd>
          <dt>Monotonic Random (Method 2):</dt>
          <dd>
            <t>With this method, the random data is extended to also function as a counter.
This monotonic value can be thought of as a "randomly seeded counter" which
<bcp14>MUST</bcp14> be incremented in the least significant position for each UUID created
on a given timestamp tick.
UUIDv7's rand_b section <bcp14>SHOULD</bcp14> be utilized with this method to handle batch
UUID generation during a single timestamp tick.
The increment value for every UUID generation <bcp14>SHOULD</bcp14> be a random integer
of any desired length larger than zero. It ensures the UUIDs retain the required
level of unguessability provided by the underlying entropy.
The increment value <bcp14>MAY</bcp14> be one when the number of UUIDs generated in a particular
period of time is important and guessability is not an issue. However, it
<bcp14>SHOULD NOT</bcp14> be used by implementations that favor unguessiblity, as the resulting
values are easily guessable.</t>
          </dd>
        </dl>
        <t>The following sub-topics cover topics related solely with creating reliable
fixed-length dedicated counters:</t>
        <dl newline="true">
          <dt>Fixed-Length Dedicated Counter Seeding:</dt>
          <dd>
            <t>Implementations utilizing the fixed-length counter method <bcp14>SHOULD</bcp14> randomly initialize
the counter with each new timestamp tick.
However, when the timestamp has not incremented, the counter <bcp14>SHOULD</bcp14> be frozen
and incremented via the desired increment logic.
When utilizing a randomly seeded counter alongside Method 1, the random value <bcp14>MAY</bcp14>
be regenerated with each counter increment without impacting sortability.
The downside is that Method 1 is prone to overflows if a counter of adequate
length is not selected or the random data generated leaves little room for
the required number of increments.
Implementations utilizing fixed-length counter method <bcp14>MAY</bcp14> also choose to
randomly initialize a portion counter rather than the entire counter. For
example, a 24 bit counter could have the 23 bits in least-significant, right-most,
position randomly initialized. The remaining most significant, left-most
counter bits are initialized as zero for the sole purpose of guarding against
counter rollovers.</t>
          </dd>
          <dt>Fixed-Length Dedicated Counter Length:</dt>
          <dd>
            <t>Care <bcp14>MUST</bcp14> be taken to select a counter bit-length that can properly handle
the level of timestamp precision in use.
For example, millisecond precision generally requires a larger counter than a
timestamp with nanosecond precision.
General guidance is that the counter <bcp14>SHOULD</bcp14> be at least 12 bits but no longer
than 42 bits.
Care <bcp14>SHOULD</bcp14> also be given to ensure that the counter length selected leaves
room for sufficient entropy in the random portion of the UUID after the counter.
This entropy helps improve the unguessability characteristics of UUIDs created
within the batch.</t>
          </dd>
        </dl>
        <t>The following sub-topics cover rollover handling with either type of counter
method:</t>
        <dl newline="true">
          <dt>Counter Rollover Guards:</dt>
          <dd>
            <t>The technique from Fixed-Length Dedicated Counter Seeding that describes
allocating a segment of the fixed-length counter as a rollover guard is also
helpful to mitigate counter rollover issues.
This same technique can be used with monotonic random counter methods
by ensuring the total length of a possible increment in the least significant,
right most position is less than the total length of the random being incremented.
As such the most significant, left-most, bits can be incremented as rollover
guarding.</t>
          </dd>
          <dt>Counter Rollover Handling:</dt>
          <dd>
            <t>Counter rollovers <bcp14>SHOULD</bcp14> be handled by the application to avoid sorting issues.
The general guidance is that applications that care about absolute monotonicity
and sortability <bcp14>SHOULD</bcp14> freeze the counter and wait for the timestamp to advance
which ensures monotonicity is not broken.
Alternatively, implementations <bcp14>MAY</bcp14> increment the timestamp ahead of the actual
time and reinitialize the counter.</t>
          </dd>
        </dl>
        <t>Implementations <bcp14>MAY</bcp14> use the following logic to ensure UUIDs featuring embedded
counters are monotonic in nature:</t>
        <ol spacing="normal" type="1"><li>Compare the current timestamp against the previously stored timestamp.</li>
          <li>If the current timestamp is equal to the previous timestamp, increment the
  counter according to the desired method.</li>
          <li>If the current timestamp is greater than the previous timestamp, re-initialize
  the desired counter method to the new timestamp and generate new random bytes
  (if the bytes were frozen or being used as the seed for a monotonic counter).</li>
        </ol>
        <dl>
          <dt>Monotonic Error Checking:</dt>
          <dd>
            <t>Implementations <bcp14>SHOULD</bcp14> check if the the currently generated UUID is greater
than the previously generated UUID. If this is not the case then any number
of things could have occurred, such as clock rollbacks,
leap second handling, and counter rollovers. Applications <bcp14>SHOULD</bcp14> embed sufficient
logic to catch these scenarios and correct the problem to ensure that the next
UUID generated is greater than the previous. To handle this scenario, the
general guidance is that application <bcp14>MAY</bcp14> reuse the previous timestamp and
increment the previous counter method.</t>
          </dd>
        </dl>
      </section>
      <section anchor="generator_states">
        <name>UUID Generator States</name>
        <t>The UUID generator state only needs to be read from stable storage once at boot
time, if it is read into a system-wide shared volatile store (and
updated whenever the stable store is updated).</t>
        <t>If an implementation does not have any stable store available, then
it can always say that the values were unavailable.  This is the
least desirable implementation because it will increase the frequency
of creation of values such as clock sequence, counters or random data which increases the
probability of duplicates.</t>
        <t>For UUIDv1 and UUIDv6, if the node ID can never change (e.g., the network interface card
from which the node ID is derived is inseparable
from the system), or if any change also reinitializes the clock
sequence to a random value, then instead of keeping it in stable
store, the current node ID may be returned.</t>
        <t>For UUIDv1 and UUIDv6, the state does not always need to be written to stable store every
time a UUID is generated.  The timestamp in the stable store can be
periodically set to a value larger than any yet used in a UUID.  As
long as the generated UUIDs have timestamps less than that value, and
the clock sequence and node ID remain unchanged, only the shared
volatile copy of the state needs to be updated.  Furthermore, if the
timestamp value in stable store is in the future by less than the
typical time it takes the system to reboot, a crash will not cause a
reinitialization of the clock sequence.</t>
        <t>If it is too expensive to access shared state each time a UUID is
generated, then the system-wide generator can be implemented to
allocate a block of time stamps each time it is called; a per-
process generator can allocate from that block until it is exhausted.</t>
      </section>
      <section anchor="distributed_shared_knowledge">
        <name>Distributed UUID Generation</name>
        <t>Some implementations <bcp14>MAY</bcp14> desire to utilize multi-node, clustered, applications
which involve two or more
nodes independently generating UUIDs that will be stored in a common location.
While UUIDs already feature sufficient entropy to ensure that the chances
of collision are low as the total number of nodes increase; so does the likelihood
of a collision.</t>
        <t>This section will detail the approaches that have been observed by by multi-node
UUID implementations in distributed environments.</t>
        <dl newline="true">
          <dt>Centralized Registry:</dt>
          <dd>
            <t>With this method all nodes tasked with creating UUIDs consult a central registry
and confirm the generated value is unique. As applications scale, the communication
with the central registry could become a bottleneck and impact UUID generation
in a negative way. Shared knowledge schemes with central/global
registries are outside the scope of this specification and should generally be discouraged.</t>
          </dd>
          <dt>Node IDs:</dt>
          <dd>
            <t>With this method, a pseudo-random Node ID value is placed within the UUID
layout.
This identifier helps ensure the bit-space for a given node is unique, resulting
in UUIDs that do not conflict with any other UUID created by another node
with a different node id.
Implementations that choose to leverage an embedded node id <bcp14>SHOULD</bcp14> utilize
UUIDv8.
The node id <bcp14>SHOULD NOT</bcp14> be an IEEE 802 MAC address as per <xref target="Security"/>.
The location and bit length are left to implementations and are outside the
scope of this specification.
Furthermore, the creation and negotiation of unique node ids among nodes
is also out of scope for this specification.</t>
          </dd>
        </dl>
        <t>Utilization of either a centralized registry or Node ID is not required
for implementing UUIDs in this specification. However, implementations <bcp14>SHOULD</bcp14>
utilize one of the two aforementioned methods if distributed UUID generation
is a requirement.</t>
        <t>Distributed applications generating UUIDs at a variety of hosts <bcp14>MUST</bcp14>
be willing to rely on the random number source at all hosts.  If this
is not feasible, the namespace variant should be used.</t>
      </section>
      <section anchor="name_based_uuid_generation">
        <name>Name-Based UUID Generation</name>
        <t>The concept of name and name space should be broadly construed, and not
limited to textual names.  For example, some name spaces are the
domain name system, URLs, Object Identifiers (OIDs), X.500 Distinguished
Names (DNs), and reserved words in a programming language.  The
mechanisms or conventions used for allocating names and ensuring
their uniqueness within their name spaces are beyond the scope of
this specification.</t>
        <t>The requirements for these types of UUIDs are as follows:</t>
        <ul spacing="normal">
          <li>UUIDs generated at different times from the same name in the
same namespace <bcp14>MUST</bcp14> be equal.</li>
          <li>UUIDs generated from two different names in the same namespace
should be different (with very high probability).</li>
          <li>UUIDs generated from the same name in two different namespaces
should be different (with very high probability).</li>
          <li>If two UUIDs that were generated from names are equal, then they
were generated from the same name in the same namespace (with very
high probability).</li>
        </ul>
      </section>
      <section anchor="collision_resistance">
        <name>Collision Resistance</name>
        <t>Implementations <bcp14>SHOULD</bcp14> weigh the consequences of UUID collisions within their
application and when deciding between UUID versions that use entropy (randomness)
versus the other components such as those in <xref target="timestamp_considerations"/> and <xref target="monotonicity_counters"/>.
This is especially true for distributed node collision resistance as defined
by <xref target="distributed_shared_knowledge"/>.</t>
        <t>There are two example scenarios below which help illustrate the varying seriousness
of a collision within an application.</t>
        <dl newline="true">
          <dt>Low Impact</dt>
          <dd>
            <t>A UUID collision generated a duplicate log entry which results in incorrect
statistics derived from the data. Implementations that are not negatively
affected by collisions may continue with the entropy and uniqueness provided
by the traditional UUID format.</t>
          </dd>
          <dt>High Impact:</dt>
          <dd>
            <t>A duplicate key causes an airplane to receive the wrong course which puts
people's lives at risk. In this scenario there is no margin for error. Collisions
<bcp14>MUST</bcp14> be avoided and failure is unacceptable. Applications dealing with this
type of scenario <bcp14>MUST</bcp14> employ as much collision resistance as possible within
the given application context.</t>
          </dd>
        </dl>
      </section>
      <section anchor="global_local_uniqueness">
        <name>Global and Local Uniqueness</name>
        <t>UUIDs created by this specification <bcp14>MAY</bcp14> be used to provide local uniqueness
guarantees.
For example, ensuring UUIDs created within a local application context are
unique within a database <bcp14>MAY</bcp14> be sufficient for some implementations where
global uniqueness outside of the application context, in other applications,
or around the world is not required.</t>
        <t>Although true global uniqueness is impossible to guarantee without a shared
knowledge scheme, a shared knowledge scheme is not required by UUID to provide
uniqueness guarantees.
Implementations <bcp14>MAY</bcp14> implement a shared knowledge scheme introduced in <xref target="distributed_shared_knowledge"/> as they see fit to extend the uniqueness guaranteed this specification.</t>
      </section>
      <section anchor="unguessability">
        <name>Unguessability</name>
        <t>Implementations <bcp14>SHOULD</bcp14> utilize a cryptographically secure pseudo-random number
generator (CSPRNG) to provide values that are both difficult to predict ("unguessable")
and have a low likelihood of collision ("unique").
Care <bcp14>SHOULD</bcp14> be taken to ensure the CSPRNG state is properly reseeded upon
state changes, such as process forks, to ensure proper CSPRNG operation.
CSPRNG ensures the best of <xref target="collision_resistance"/> and <xref target="Security"/> are present in modern UUIDs.</t>
        <t>Further advice on generating cryptographic-quality random numbers can be found in <xref target="RFC4086"/></t>
      </section>
      <section anchor="unidentifiable">
        <name>UUIDs that Do Not Identify the Host</name>
        <t>This section describes how to generate a UUIDv1 or UUIDv6 value if an IEEE
802 address is not available, or its use is not desired.</t>
        <t>A better solution is to obtain a 47-bit cryptographic-quality random
number and use it as the low 47 bits of the node ID, with the least
significant bit of the first octet of the node ID set to one.  This
bit is the unicast/multicast bit, which will never be set in IEEE 802
addresses obtained from network cards.  Hence, there can never be a
conflict between UUIDs generated by machines with and without network
cards.  (Recall that the IEEE 802 spec talks about transmission
order, which is the opposite of the in-memory representation that is
discussed in this document.)</t>
        <t>For compatibility with earlier specifications, note that this
document uses the unicast/multicast bit, instead of the arguably more
correct local/global bit.</t>
        <t>In addition, items such as the computer's name and the name of the
operating system, while not strictly speaking random, will help
differentiate the results from those obtained by other systems.</t>
        <t>The exact algorithm to generate a node ID using these data is system
specific, because both the data available and the functions to obtain
them are often very system specific.  A generic approach, however, is
to accumulate as many sources as possible into a buffer, use a
message digest such as MD5 <xref target="RFC1321"/> or SHA-1 <xref target="SHA1"/>, take an arbitrary 6
bytes from the hash value, and set the multicast bit as described
above.</t>
      </section>
      <section anchor="sorting">
        <name>Sorting</name>
        <t>UUIDv6 and UUIDv7 are designed so that implementations that require sorting
(e.g. database indexes) <bcp14>SHOULD</bcp14> sort as opaque raw bytes, without need for
parsing or introspection.</t>
        <t>Time ordered monotonic UUIDs benefit from greater database index locality
because the new values are near each other in the index.
As a result objects are more easily clustered together for better performance.
The real-world differences in this approach of index locality vs random data
inserts can be quite large.</t>
        <t>UUIDs formats created by this specification <bcp14>SHOULD</bcp14> be lexicographically sortable
while in the textual representation.</t>
        <t>UUIDs created by this specification are crafted with big-endian byte order
(network byte order) in mind. If little-endian style is required a custom
UUID format <bcp14>SHOULD</bcp14> be created using UUIDv8.</t>
      </section>
      <section anchor="opacity">
        <name>Opacity</name>
        <t>UUIDs <bcp14>SHOULD</bcp14> be treated as opaque values and implementations <bcp14>SHOULD NOT</bcp14> examine
the bits in a UUID. However,
inspectors <bcp14>MAY</bcp14> refer to <xref target="variant_field"/> and <xref target="version_field"/> when required to determine UUID version and variant.</t>
      </section>
      <section anchor="database_considerations">
        <name>DBMS and Database Considerations</name>
        <t>For many applications, such as databases, storing UUIDs as text is unnecessarily
verbose, requiring 288 bits to represent 128 bit UUID values.
Thus, where feasible, UUIDs <bcp14>SHOULD</bcp14> be stored within database applications
as the underlying 128 bit binary value.</t>
        <t>For other systems, UUIDs <bcp14>MAY</bcp14> be stored in binary form or as text, as appropriate.
The trade-offs to both approaches are:</t>
        <ul spacing="normal">
          <li>Storing as binary requires less space and may result in faster data access.</li>
          <li>Storing as text requires more space but may require less translation if the
resulting text form is to be used after retrieval and thus maybe simpler
to implement.</li>
        </ul>
        <t>DBMS vendors are encouraged to provide functionality to generate and store
UUID formats defined by this specification for use as identifiers or left
parts of identifiers such as, but not limited to, primary keys, surrogate
keys for temporal databases, foreign keys included in polymorphic relationships,
and keys for key-value pairs in JSON columns and key-value databases.
Applications using a monolithic database may find using database-generated
UUIDs (as opposed to client-generate UUIDs) provides the best UUID monotonicity.
In addition to UUIDs, additional identifiers <bcp14>MAY</bcp14> be used to ensure integrity
and feedback.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>Per <xref target="RFC8141"/> here is the Namespace Registration Template filled out for this namespace and hereby a request to reference this document (when the final version is published) at <xref target="URNNamespaces"/>.  Note that namespace is already listed and this is a request to update that entry to reference this document.</t>
      <t>Namespace Identifier: UUID (formal)</t>
      <t>Version: 1</t>
      <t>Date: 2003-10-01</t>
      <t>Registrant: JTC 1/SC6 (ASN.1 Rapporteur Group)</t>
      <t>Purpose: A UUID is an identifier that is unique across both space and time,
  with respect to the space of all UUIDs.  Since a UUID is a fixed
  size and contains a time field, it is possible for values to
  rollover (around A.D. 3400, depending on the specific algorithm
  used).  A UUID can be used for multiple purposes, from tagging
  objects with an extremely short lifetime, to reliably identifying
  very persistent objects across a network.</t>
      <t>Syntax: The internal representation of a UUID is a specific sequence of
  bits in memory, as described in <xref target="format"/>.  To accurately
  represent a UUID as a URN, it is necessary to convert the bit
  sequence to a string representation.</t>
      <t>Each field is treated as an integer and has its value printed as a
  zero-filled hexadecimal digit string with the most significant
  digit first.  The hexadecimal values "a" through "f" are output as
  lower case characters and are case insensitive on input.</t>
      <t>The formal definition of the UUID string representation is
  provided by the following ABNF <xref target="RFC5234"/>:</t>
      <sourcecode type="abnf"><![CDATA[
UUID                   = time-low "-" time-mid "-"
                         time-high-and-version "-"
                         clock-seq-and-reserved
                         clock-seq-low "-" node
time-low               = 4hexOctet
time-mid               = 2hexOctet
time-high-and-version  = 2hexOctet
clock-seq-and-reserved = hexOctet
clock-seq-low          = hexOctet
node                   = 6hexOctet
hexOctet               = hexDigit hexDigit
hexDigit =
      "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" /
      "a" / "b" / "c" / "d" / "e" / "f" /
      "A" / "B" / "C" / "D" / "E" / "F"
]]></sourcecode>
      <t>The following is an example of the string representation of a UUID as
  a URN:</t>
      <t>urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6</t>
      <t>Assignment: Individual UUID values are generated based on the uniqueness properties otherwise covered in this document with version-specific considerations for each.  Mechinisms include pseudorandom number generation, cryptographic hashing and the option to use IEEE 802 MAC addresses.</t>
      <t>Security and Privacy: The recommended generation algorithms for UUIDs per this document involve pseudorandom number generation and as such do not present additional privacy or data exposure risks beyond any such random value generated.  The use of IEEE 802 MAC addresses which may present security problems has explicitly been made optional and not recommended.</t>
      <t>Interoperability: UUIDs, and UUID values in the form of URNs in particular,
  are opaque values the syntax as covered above has no proposed changes
  and thus no known interoperability issues.</t>
      <t>Resolution: Since UUIDs are not globally resolvable, this is not applicable.</t>
      <t>Documentation: This document and RFC4122. Relevant ancillary documentation: <xref target="NCA"/><xref target="C309"/></t>
      <t>Additional Information: The intention here is simply to include this document
  in any applicable references at <xref target="URNNamespaces"/>. There is no intention
  to change the existing UUID URN registration.  The scope of this document
  pertains solely to the internal structure and versions of UUIDs, the
  textual format and URN registration are specifically out of scope and
  not changing as part of this update.</t>
    </section>
    <section anchor="community">
      <name>Community Considerations</name>
      <t>The use of UUIDs is extremely pervasive in computing.  They comprise
the core identifier infrastructure for many operating systems
such as Microsoft Windows and applications such as the Mozilla Web browser and in
many cases, become exposed in many non-standard ways.</t>
      <t>This specification attempts to standardize that practice as openly as
possible and in a way that attempts to benefit the entire Internet.</t>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>Implementations <bcp14>MUST NOT</bcp14> assume that UUIDs are hard to guess.
Foe example, they MUT not be used
as security capabilities (identifiers whose mere possession grants
access).  Discovery of predictablity in a random number source will
result in a vulnerability.</t>
      <t>Implementations <bcp14>MUST NOT</bcp14> assume that it is easy to determine if a UUID has been
slightly transposed in order to redirect a reference to another
object.  Humans do not have the ability to easily check the integrity
of a UUID by simply glancing at it.</t>
      <t>MAC addresses pose inherent security risks and <bcp14>SHOULD</bcp14> not be used within
a UUID.
Instead CSPRNG data <bcp14>SHOULD</bcp14> be selected from a source with sufficient entropy
to ensure guaranteed
uniqueness among UUID generation. See <xref target="unguessability"/> and <xref target="unidentifiable"/> for more information.</t>
      <t>Timestamps embedded in the UUID do pose a very small attack surface. The
timestamp in conjunction with
an embedded counter does signal the order of creation for a given UUID and
its corresponding data but
does not define anything about the data itself or the application as a whole.
If UUIDs are required for
use with any security operation within an application context in any shape
or form then UUIDv4, <xref target="uuidv4"/> <bcp14>SHOULD</bcp14> be utilized.</t>
      <t>See <xref target="RFC6151"/> for MD5 Security Considerations and <xref target="RFC6194"/> for SHA1 security considerations.</t>
    </section>
    <section anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors gratefully acknowledge the contributions of Rich Salz,
Ben Campbell,
Ben Ramsey,
Fabio Lima,
Gonzalo Salgueiro,
Martin Thomson,
Murray S. Kucherawy,
Rick van Rein,
Rob Wilton,
Sean Leonard,
Theodore Y. Ts'o.,
Robert Kieffer,
Sergey Prokhorenko,
LiosK</t>
      <t>As well as all of those in the IETF community and on GitHub to who contributed
to the discussions which resulted in this document.</t>
      <t>This document draws heavily on the OSF DCE specification for UUIDs.
Ted Ts'o provided helpful comments, especially on the byte ordering
section which we mostly plagiarized from a proposed wording he
supplied (all errors in that section are our responsibility,
however).</t>
      <t>We are also grateful to the careful reading and bit-twiddling of Ralf
S. Engelschall, John Larmouth, and Paul Thorpe.  Professor Larmouth
was also invaluable in achieving coordination with ISO/IEC.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="NCA">
          <front>
            <title>Network Computing Architecture</title>
            <author initials="L." surname="Zahn" fullname="L. Zahn">
              <organization/>
            </author>
            <author initials="T." surname="Dineen" fullname="T. Dineen">
              <organization/>
            </author>
            <author initials="P." surname="Leach" fullname="P. Leach">
              <organization/>
            </author>
            <date year="1990" month="January"/>
          </front>
          <seriesInfo name="ISBN" value="0-13-611674-4"/>
        </reference>
        <reference anchor="C309" target="https://pubs.opengroup.org/onlinepubs/9696999099/toc.pdf">
          <front>
            <title>DCE: Remote Procedure Call</title>
            <author>
              <organization/>
            </author>
            <date year="1994" month="August"/>
          </front>
          <seriesInfo name="ISBN" value="1-85912-041-5"/>
          <refcontent>Open Group CAE Specification C309</refcontent>
        </reference>
        <reference anchor="X667">
          <front>
            <title>Information Technology, "Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components"</title>
            <author>
              <organization/>
            </author>
            <date year="2004"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9834-8:2004"/>
          <seriesInfo name="ITU-T Rec." value="X.667"/>
        </reference>
        <reference anchor="RFC1321">
          <front>
            <title>The MD5 Message-Digest Algorithm</title>
            <author fullname="R. Rivest" initials="R." surname="Rivest">
              <organization/>
            </author>
            <date month="April" year="1992"/>
            <abstract>
              <t>This document describes the MD5 message-digest algorithm. The algorithm takes as input a message of arbitrary length and produces as output a 128-bit "fingerprint" or "message digest" of the input.  This memo provides information for the Internet community.  It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1321"/>
          <seriesInfo name="DOI" value="10.17487/RFC1321"/>
        </reference>
        <reference anchor="RFC6151">
          <front>
            <title>Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms</title>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <author fullname="L. Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document updates the security considerations for the MD5 message digest algorithm.  It also updates the security considerations for HMAC-MD5.  This document is not an Internet Standards Track  specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6151"/>
          <seriesInfo name="DOI" value="10.17487/RFC6151"/>
        </reference>
        <reference anchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd">
              <organization/>
            </author>
            <author fullname="J. Schiller" initials="J." surname="Schiller">
              <organization/>
            </author>
            <author fullname="S. Crocker" initials="S." surname="Crocker">
              <organization/>
            </author>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts.  However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities.  The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult.  This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities.  It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications.  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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <date month="April" year="2017"/>
            <abstract>
              <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier.  With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance.  With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA).  This document obsoletes both RFCs 2141 and 3406.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8141"/>
          <seriesInfo name="DOI" value="10.17487/RFC8141"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6194">
          <front>
            <title>Security Considerations for the SHA-0 and SHA-1 Message-Digest Algorithms</title>
            <author fullname="T. Polk" initials="T." surname="Polk">
              <organization/>
            </author>
            <author fullname="L. Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document includes security considerations for the SHA-0 and SHA-1 message digest algorithm.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6194"/>
          <seriesInfo name="DOI" value="10.17487/RFC6194"/>
        </reference>
        <reference anchor="SHA1" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>Secure Hash Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="FIPS" value="PUB 180-4"/>
        </reference>
        <reference anchor="C311" target="https://pubs.opengroup.org/onlinepubs/9696989899/toc.pdf">
          <front>
            <title>DCE 1.1: Authentication and Security Services</title>
            <author>
              <organization/>
            </author>
            <date year="1997"/>
          </front>
          <refcontent>Open Group CAE Specification C311</refcontent>
        </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="LexicalUUID" target="https://github.com/twitter-archive/cassie">
          <front>
            <title>A Scala client for Cassandra</title>
            <author>
              <organization>Twitter</organization>
            </author>
            <date year="2012" month="November"/>
          </front>
          <seriesInfo name="commit" value="f6da4e0"/>
        </reference>
        <reference anchor="Snowflake" target="https://github.com/twitter-archive/snowflake/releases/tag/snowflake-2010">
          <front>
            <title>Snowflake is a network service for generating unique ID numbers at high scale with some simple guarantees.</title>
            <author>
              <organization>Twitter</organization>
            </author>
            <date year="2014" month="May"/>
          </front>
          <seriesInfo name="Commit" value="b3f6a3c"/>
        </reference>
        <reference anchor="Flake" target="https://github.com/boundary/flake">
          <front>
            <title>Flake: A decentralized, k-ordered id generation service in Erlang</title>
            <author>
              <organization>Boundary</organization>
            </author>
            <date year="2017" month="February"/>
          </front>
          <seriesInfo name="Commit" value="15c933a"/>
        </reference>
        <reference anchor="ShardingID" target="https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c">
          <front>
            <title>Sharding &amp; IDs at Instagram</title>
            <author>
              <organization>Instagram Engineering</organization>
            </author>
            <date year="2012" month="December"/>
          </front>
        </reference>
        <reference anchor="KSUID" target="https://github.com/segmentio/ksuid">
          <front>
            <title>K-Sortable Globally Unique IDs</title>
            <author>
              <organization>Segment</organization>
            </author>
            <date year="2020" month="July"/>
          </front>
          <seriesInfo name="Commit" value="bf376a7"/>
        </reference>
        <reference anchor="Elasticflake" target="https://github.com/ppearcy/elasticflake">
          <front>
            <title>Sequential UUID / Flake ID generator pulled out of elasticsearch common</title>
            <author initials="P." surname="Pearcy" fullname="Paul Pearcy">
              <organization/>
            </author>
            <date year="2015" month="January"/>
          </front>
          <seriesInfo name="Commit" value="dd71c21"/>
        </reference>
        <reference anchor="FlakeID" target="https://github.com/T-PWK/flake-idgen">
          <front>
            <title>Flake ID Generator</title>
            <author initials="T." surname="Pawlak" fullname="Tom Pawlak">
              <organization/>
            </author>
            <date year="2020" month="April"/>
          </front>
          <seriesInfo name="Commit" value="fcd6a2f"/>
        </reference>
        <reference anchor="Sonyflake" target="https://github.com/sony/sonyflake">
          <front>
            <title>A distributed unique ID generator inspired by Twitter's Snowflake</title>
            <author>
              <organization>Sony</organization>
            </author>
            <date year="2020" month="August"/>
          </front>
          <seriesInfo name="Commit" value="848d664"/>
        </reference>
        <reference anchor="orderedUuid" target="https://itnext.io/laravel-the-mysterious-ordered-uuid-29e7500b4f8">
          <front>
            <title>Laravel: The mysterious "Ordered UUID"</title>
            <author initials="I. B." surname="Cabrera" fullname="Italo Baeza Cabrera">
              <organization/>
            </author>
            <date year="2020" month="January"/>
          </front>
        </reference>
        <reference anchor="COMBGUID" target="https://github.com/richardtallent/RT.Comb">
          <front>
            <title>Creating sequential GUIDs in C# for MSSQL or PostgreSql</title>
            <author initials="R." surname="Tallent" fullname="Richard Tallent">
              <organization/>
            </author>
            <date year="2020" month="December"/>
          </front>
          <seriesInfo name="Commit" value="2759820"/>
        </reference>
        <reference anchor="ULID" target="https://github.com/ulid/spec">
          <front>
            <title>Universally Unique Lexicographically Sortable Identifier</title>
            <author initials="A." surname="Feerasta" fullname="Alizain Feerasta">
              <organization/>
            </author>
            <date year="2019" month="May"/>
          </front>
          <seriesInfo name="Commit" value="d0c7170"/>
        </reference>
        <reference anchor="SID" target="https://github.com/chilts/sid">
          <front>
            <title>sid : generate sortable identifiers</title>
            <author initials="A." surname="Chilton" fullname="Andrew Chilton">
              <organization/>
            </author>
            <date year="2019" month="June"/>
          </front>
          <seriesInfo name="Commit" value="660e947"/>
        </reference>
        <reference anchor="pushID" target="https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html">
          <front>
            <title>The 2^120 Ways to Ensure Unique Identifiers</title>
            <author>
              <organization>Google</organization>
            </author>
            <date year="2015" month="February"/>
          </front>
        </reference>
        <reference anchor="XID" target="https://github.com/rs/xid">
          <front>
            <title>Globally Unique ID Generator</title>
            <author initials="O." surname="Poitrey" fullname="Olivier Poitrey">
              <organization/>
            </author>
            <date year="2020" month="October"/>
          </front>
          <seriesInfo name="Commit" value="efa678f"/>
        </reference>
        <reference anchor="ObjectID" target="https://docs.mongodb.com/manual/reference/method/ObjectId/">
          <front>
            <title>ObjectId - MongoDB Manual</title>
            <author>
              <organization>MongoDB</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="CUID" target="https://github.com/ericelliott/cuid">
          <front>
            <title>Collision-resistant ids optimized for horizontal scaling and performance.</title>
            <author initials="E." surname="Elliott" fullname="Eric Elliott">
              <organization/>
            </author>
            <date year="2020" month="October"/>
          </front>
          <seriesInfo name="Commit" value="215b27b"/>
        </reference>
        <reference anchor="IEEE754" target="https://standards.ieee.org/ieee/754/6210/">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic.</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2019" month="July"/>
          </front>
          <seriesInfo name="Series" value="754-2019"/>
        </reference>
        <reference anchor="URNNamespaces" target="https://www.iana.org/assignments/urn-namespaces/urn-namespaces.xhtml">
          <front>
            <title>Uniform Resource Names (URN) Namespaces</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date year="2022" month="November" day="18"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="example_code">
      <name>Example Code</name>
      <section anchor="sample_implementation">
        <name>Creating UUIDv1 through UUIDv5 Value</name>
        <t>This implementation consists of 5 files: uuid.h, uuid.c, sysdep.h,
sysdep.c and utest.c.  The uuid.* files are the system independent
implementation of the UUID generation algorithms described above,
with all the optimizations described above except efficient state
sharing across processes included.  The code has been tested on Linux
(Red Hat 4.0) with GCC (2.7.2), and Windows NT 4.0 with VC++ 5.0.
The code assumes 64-bit integer support, which makes it much clearer.</t>
        <t>All the following source files should have the following copyright
notice included:</t>
        <t>copyrt.h</t>
        <artwork><![CDATA[
/*
** Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
** Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. &
** Digital Equipment Corporation, Maynard, Mass.
** Copyright (c) 1998 Microsoft.
** To anyone who acknowledges that this file is provided "AS IS"
** without any express or implied warranty: permission to use, copy,
** modify, and distribute this file for any purpose is hereby
** granted without fee, provided that the above copyright notices and
** this notice appears in all source code copies, and that none of
** the names of Open Software Foundation, Inc., Hewlett-Packard
** Company, or Digital Equipment Corporation be used in advertising
** or publicity pertaining to distribution of the software without
** specific, written prior permission. Neither Open Software
** Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital
** Equipment Corporation makes any representations about the
** suitability of this software for any purpose.
*/

]]></artwork>
        <t>uuid.h</t>
        <artwork><![CDATA[
#include "copyrt.h"
#undef uuid_t
typedef struct {
    unsigned32  time_low;
    unsigned16  time_mid;
    unsigned16  time_hi_and_version;
    unsigned8   clock_seq_hi_and_reserved;
    unsigned8   clock_seq_low;
    byte        node[6];
} uuid_t;

/* uuid_create -- generate a UUID */
int uuid_create(uuid_t * uuid);

/* uuid_create_md5_from_name -- create a version 3 (MD5) UUID using a
   "name" from a "name space" */
void uuid_create_md5_from_name(
    uuid_t *uuid,         /* resulting UUID */
    uuid_t nsid,          /* UUID of the namespace */
    void *name,           /* the name from which to generate a UUID */
    int namelen           /* the length of the name */
);

/* uuid_create_sha1_from_name -- create a version 5 (SHA-1) UUID
   using a "name" from a "name space" */
void uuid_create_sha1_from_name(

    uuid_t *uuid,         /* resulting UUID */
    uuid_t nsid,          /* UUID of the namespace */
    void *name,           /* the name from which to generate a UUID */
    int namelen           /* the length of the name */
);

/* uuid_compare --  Compare two UUID's "lexically" and return
        -1   u1 is lexically before u2
         0   u1 is equal to u2
         1   u1 is lexically after u2
   Note that lexical ordering is not temporal ordering!
*/
int uuid_compare(uuid_t *u1, uuid_t *u2);
]]></artwork>
        <t>uuid.c</t>
        <artwork><![CDATA[
#include "copyrt.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "sysdep.h"
#include "uuid.h"

/* various forward declarations */
static int read_state(unsigned16 *clockseq, uuid_time_t *timestamp,
    uuid_node_t *node);
static void write_state(unsigned16 clockseq, uuid_time_t timestamp,
    uuid_node_t node);
static void format_uuid_v1(uuid_t *uuid, unsigned16 clockseq,
    uuid_time_t timestamp, uuid_node_t node);
static void format_uuid_v3or5(uuid_t *uuid, unsigned char hash[16],
    int v);
static void get_current_time(uuid_time_t *timestamp);
static unsigned16 true_random(void);

/* uuid_create -- generate a UUID */
int uuid_create(uuid_t *uuid)
{
     uuid_time_t timestamp, last_time;
     unsigned16 clockseq;
     uuid_node_t node;
     uuid_node_t last_node;
     int f;

     /* acquire system-wide lock so we're alone */
     LOCK;
     /* get time, node ID, saved state from non-volatile storage */
     get_current_time(&timestamp);
     get_ieee_node_identifier(&node);
     f = read_state(&clockseq, &last_time, &last_node);

     /* if no NV state, or if clock went backwards, or node ID
        changed (e.g., new network card) change clockseq */
     if (!f || memcmp(&node, &last_node, sizeof node))
         clockseq = true_random();
     else if (timestamp < last_time)
         clockseq++;

     /* save the state for next time */
     write_state(clockseq, timestamp, node);

     UNLOCK;

     /* stuff fields into the UUID */
     format_uuid_v1(uuid, clockseq, timestamp, node);
     return 1;
}

/* format_uuid_v1 -- make a UUID from the timestamp, clockseq,
                     and node ID */
void format_uuid_v1(uuid_t* uuid, unsigned16 clock_seq,
                    uuid_time_t timestamp, uuid_node_t node)
{
    /* Construct a version 1 uuid with the information we've gathered
       plus a few constants. */
    uuid->time_low = (unsigned long)(timestamp & 0xFFFFFFFF);
    uuid->time_mid = (unsigned short)((timestamp >> 32) & 0xFFFF);
    uuid->time_hi_and_version =
        (unsigned short)((timestamp >> 48) & 0x0FFF);
    uuid->time_hi_and_version |= (1 << 12);
    uuid->clock_seq_low = clock_seq & 0xFF;
    uuid->clock_seq_hi_and_reserved = (clock_seq & 0x3F00) >> 8;
    uuid->clock_seq_hi_and_reserved |= 0x80;
    memcpy(&uuid->node, &node, sizeof uuid->node);
}

/* data type for UUID generator persistent state */
typedef struct {
    uuid_time_t  ts;       /* saved timestamp */
    uuid_node_t  node;     /* saved node ID */
    unsigned16   cs;       /* saved clock sequence */
} uuid_state;

static uuid_state st;

/* read_state -- read UUID generator state from non-volatile store */
int read_state(unsigned16 *clockseq, uuid_time_t *timestamp,
               uuid_node_t *node)
{
    static int inited = 0;
    FILE *fp;

    /* only need to read state once per boot */
    if (!inited) {
        fp = fopen("state", "rb");
        if (fp == NULL)
            return 0;
        fread(&st, sizeof st, 1, fp);
        fclose(fp);
        inited = 1;
    }
    *clockseq = st.cs;
    *timestamp = st.ts;
    *node = st.node;
    return 1;
}

/* write_state -- save UUID generator state back to non-volatile
   storage */
void write_state(unsigned16 clockseq, uuid_time_t timestamp,
                 uuid_node_t node)
{
    static int inited = 0;
    static uuid_time_t next_save;
    FILE* fp;

    if (!inited) {
        next_save = timestamp;
        inited = 1;
    }

    /* always save state to volatile shared state */
    st.cs = clockseq;
    st.ts = timestamp;
    st.node = node;
    if (timestamp >= next_save) {
        fp = fopen("state", "wb");
        fwrite(&st, sizeof st, 1, fp);
        fclose(fp);
        /* schedule next save for 10 seconds from now */
        next_save = timestamp + (10 * 10 * 1000 * 1000);
    }
}

/* get-current_time -- get time as 60-bit 100ns ticks since UUID epoch.
   Compensate for the fact that real clock resolution is
   less than 100ns. */
void get_current_time(uuid_time_t *timestamp)
{
    static int inited = 0;
    static uuid_time_t time_last;
    static unsigned16 uuids_this_tick;
    uuid_time_t time_now;

    if (!inited) {
        get_system_time(&time_now);
        uuids_this_tick = UUIDS_PER_TICK;
        inited = 1;
    }

    for ( ; ; ) {
        get_system_time(&time_now);

        /* if clock reading changed since last UUID generated, */
        if (time_last != time_now) {
            /* reset count of uuids gen'd with this clock reading */
            uuids_this_tick = 0;
            time_last = time_now;
            break;
        }
        if (uuids_this_tick < UUIDS_PER_TICK) {
            uuids_this_tick++;
            break;
        }

        /* going too fast for our clock; spin */
    }
    /* add the count of uuids to low order bits of the clock reading */
    *timestamp = time_now + uuids_this_tick;
}

/* true_random -- generate a crypto-quality random number.
   **This sample doesn't do that.** */
static unsigned16 true_random(void)
{
    static int inited = 0;
    uuid_time_t time_now;

    if (!inited) {
        get_system_time(&time_now);
        time_now = time_now / UUIDS_PER_TICK;
        srand((unsigned int)
               (((time_now >> 32) ^ time_now) & 0xffffffff));
        inited = 1;
    }

    return rand();
}

/* uuid_create_md5_from_name -- create a version 3 (MD5) UUID using a
   "name" from a "name space" */
void uuid_create_md5_from_name(uuid_t *uuid, uuid_t nsid, void *name,
                               int namelen)
{
    MD5_CTX c;
    unsigned char hash[16];
    uuid_t net_nsid;

    /* put name space ID in network byte order so it hashes the same
       no matter what endian machine we're on */
    net_nsid = nsid;
    net_nsid.time_low = htonl(net_nsid.time_low);
    net_nsid.time_mid = htons(net_nsid.time_mid);
    net_nsid.time_hi_and_version = htons(net_nsid.time_hi_and_version);

    MD5Init(&c);
    MD5Update(&c, &net_nsid, sizeof net_nsid);
    MD5Update(&c, name, namelen);
    MD5Final(hash, &c);

    /* the hash is in network byte order at this point */
    format_uuid_v3or5(uuid, hash, 3);
}

void uuid_create_sha1_from_name(uuid_t *uuid, uuid_t nsid, void *name,
                                int namelen)
{
    SHA_CTX c;
    unsigned char hash[20];
    uuid_t net_nsid;

    /* put name space ID in network byte order so it hashes the same
       no matter what endian machine we're on */
    net_nsid = nsid;
    net_nsid.time_low = htonl(net_nsid.time_low);
    net_nsid.time_mid = htons(net_nsid.time_mid);
    net_nsid.time_hi_and_version = htons(net_nsid.time_hi_and_version);

    SHA1_Init(&c);
    SHA1_Update(&c, &net_nsid, sizeof net_nsid);
    SHA1_Update(&c, name, namelen);
    SHA1_Final(hash, &c);

    /* the hash is in network byte order at this point */
    format_uuid_v3or5(uuid, hash, 5);
}

/* format_uuid_v3or5 -- make a UUID from a (pseudo)random 128-bit
   number */
void format_uuid_v3or5(uuid_t *uuid, unsigned char hash[16], int v)
{
    /* convert UUID to local byte order */
    memcpy(uuid, hash, sizeof *uuid);
    uuid->time_low = ntohl(uuid->time_low);
    uuid->time_mid = ntohs(uuid->time_mid);
    uuid->time_hi_and_version = ntohs(uuid->time_hi_and_version);

    /* put in the variant and version bits */
    uuid->time_hi_and_version &= 0x0FFF;
    uuid->time_hi_and_version |= (v << 12);
    uuid->clock_seq_hi_and_reserved &= 0x3F;
    uuid->clock_seq_hi_and_reserved |= 0x80;
}

/* uuid_compare --  Compare two UUID's "lexically" and return */
#define CHECK(f1, f2) if (f1 != f2) return f1 < f2 ? -1 : 1;
int uuid_compare(uuid_t *u1, uuid_t *u2)
{
    int i;

    CHECK(u1->time_low, u2->time_low);
    CHECK(u1->time_mid, u2->time_mid);
    CHECK(u1->time_hi_and_version, u2->time_hi_and_version);
    CHECK(u1->clock_seq_hi_and_reserved, u2->clock_seq_hi_and_reserved);
    CHECK(u1->clock_seq_low, u2->clock_seq_low)
    for (i = 0; i < 6; i++) {
        if (u1->node[i] < u2->node[i])
            return -1;
        if (u1->node[i] > u2->node[i])
            return 1;
    }
    return 0;
}
#undef CHECK
]]></artwork>
        <t>sysdep.h</t>
        <artwork><![CDATA[
#include "copyrt.h"
/* remove the following define if you aren't running WIN32 */
#define WININC 0

#ifdef WININC
#include <windows.h>
#else
#include <sys/types.h>
#include <sys/time.h>
#include <sys/sysinfo.h>
#endif

#include "global.h"
/* change to point to where MD5 .h's live; RFC 1321 has sample
   implementation */
#include "md5.h"

/* set the following to the number of 100ns ticks of the actual
   resolution of your system's clock */
#define UUIDS_PER_TICK 1024

/* Set the following to a calls to get and release a global lock */
#define LOCK
#define UNLOCK

typedef unsigned long   unsigned32;
typedef unsigned short  unsigned16;
typedef unsigned char   unsigned8;
typedef unsigned char   byte;

/* Set this to what your compiler uses for 64-bit data type */
#ifdef WININC
#define unsigned64_t unsigned __int64
#define I64(C) C
#else
#define unsigned64_t unsigned long long
#define I64(C) C##LL
#endif

typedef unsigned64_t uuid_time_t;
typedef struct {
    char nodeID[6];
} uuid_node_t;

void get_ieee_node_identifier(uuid_node_t *node);
void get_system_time(uuid_time_t *uuid_time);
void get_random_info(char seed[16]);
]]></artwork>
        <t>sysdep.c</t>
        <artwork><![CDATA[
#include "copyrt.h"
#include <stdio.h>
#include "sysdep.h"

/* system dependent call to get IEEE node ID.
   This sample implementation generates a random node ID. */
void get_ieee_node_identifier(uuid_node_t *node)
{
    static inited = 0;
    static uuid_node_t saved_node;
    char seed[16];
    FILE *fp;

    if (!inited) {
        fp = fopen("nodeid", "rb");
        if (fp) {
            fread(&saved_node, sizeof saved_node, 1, fp);
            fclose(fp);
        }
        else {
            get_random_info(seed);
            seed[0] |= 0x01;
            memcpy(&saved_node, seed, sizeof saved_node);
            fp = fopen("nodeid", "wb");
            if (fp) {
                fwrite(&saved_node, sizeof saved_node, 1, fp);
                fclose(fp);
            }
        }
        inited = 1;
    }

    *node = saved_node;
}

/* system dependent call to get the current system time. Returned as
   100ns ticks since UUID epoch, but resolution may be less than
   100ns. */
#ifdef _WINDOWS_

void get_system_time(uuid_time_t *uuid_time)
{
    ULARGE_INTEGER time;

    /* NT keeps time in FILETIME format which is 100ns ticks since
       Jan 1, 1601. UUIDs use time in 100ns ticks since Oct 15, 1582.
       The difference is 17 Days in Oct + 30 (Nov) + 31 (Dec)
       + 18 years and 5 leap days. */
    GetSystemTimeAsFileTime((FILETIME *)&time);
    time.QuadPart +=

          (unsigned __int64) (1000*1000*10)       // seconds
        * (unsigned __int64) (60 * 60 * 24)       // days
        * (unsigned __int64) (17+30+31+365*18+5); // # of days
    *uuid_time = time.QuadPart;
}

/* Sample code, not for use in production; see RFC 4086 */
void get_random_info(char seed[16])
{
    MD5_CTX c;
    struct {
        MEMORYSTATUS m;
        SYSTEM_INFO s;
        FILETIME t;
        LARGE_INTEGER pc;
        DWORD tc;
        DWORD l;
        char hostname[MAX_COMPUTERNAME_LENGTH + 1];
    } r;

    MD5Init(&c);
    GlobalMemoryStatus(&r.m);
    GetSystemInfo(&r.s);
    GetSystemTimeAsFileTime(&r.t);
    QueryPerformanceCounter(&r.pc);
    r.tc = GetTickCount();
    r.l = MAX_COMPUTERNAME_LENGTH + 1;
    GetComputerName(r.hostname, &r.l);
    MD5Update(&c, &r, sizeof r);
    MD5Final(seed, &c);
}

#else

void get_system_time(uuid_time_t *uuid_time)
{
    struct timeval tp;

    gettimeofday(&tp, (struct timezone *)0);

    /* Offset between UUID formatted times and Unix formatted times.
       UUID UTC base time is October 15, 1582.
       Unix base time is January 1, 1970.*/
    *uuid_time = ((unsigned64)tp.tv_sec * 10000000)
        + ((unsigned64)tp.tv_usec * 10)
        + I64(0x01B21DD213814000);
}

/* Sample code, not for use in production; see RFC 4086 */
void get_random_info(char seed[16])
{
    MD5_CTX c;
    struct {
        struct sysinfo s;
        struct timeval t;
        char hostname[257];
    } r;

    MD5Init(&c);
    sysinfo(&r.s);
    gettimeofday(&r.t, (struct timezone *)0);
    gethostname(r.hostname, 256);
    MD5Update(&c, &r, sizeof r);
    MD5Final(seed, &c);
}

#endif
]]></artwork>
        <t>utest.c</t>
        <artwork><![CDATA[
#include "copyrt.h"
#include "sysdep.h"
#include <stdio.h>
#include "uuid.h"

uuid_t NameSpace_DNS = { /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */
    0x6ba7b810,
    0x9dad,
    0x11d1,
    0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8
};

/* puid -- print a UUID */
void puid(uuid_t u)
{
    int i;

    printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low, u.time_mid,
    u.time_hi_and_version, u.clock_seq_hi_and_reserved,
    u.clock_seq_low);
    for (i = 0; i < 6; i++)
        printf("%2.2x", u.node[i]);
    printf("\n");
}

/* Simple driver for UUID generator */
void main(int argc, char **argv)
{
    uuid_t u;
    int f;

    uuid_create(&u);
    printf("uuid_create(): "); puid(u);

    f = uuid_compare(&u, &u);
    printf("uuid_compare(u,u): %d\n", f);     /* should be 0 */
    f = uuid_compare(&u, &NameSpace_DNS);
    printf("uuid_compare(u, NameSpace_DNS): %d\n", f); /* s.b. 1 */
    f = uuid_compare(&NameSpace_DNS, &u);
    printf("uuid_compare(NameSpace_DNS, u): %d\n", f); /* s.b. -1 */
    uuid_create_md5_from_name(&u, NameSpace_DNS, "www.example.com", 15);
    printf("uuid_create_md5_from_name(): "); puid(u);
}
]]></artwork>
        <t>Sample Output of utest
~~~
     uuid_create(): 7d444840-9dc0-11d1-b245-5ffdce74fad2
     uuid_compare(u,u): 0
     uuid_compare(u, NameSpace_DNS): 1
     uuid_compare(NameSpace_DNS, u): -1
     uuid_create_md5_from_name(): 5df41881-3aed-3515-88a7-2f4a814cf09e
~~~</t>
      </section>
      <section anchor="namespaces">
        <name>Some Name Space IDs</name>
        <t>This appendix lists the name space IDs for some potentially
   interesting name spaces, as initialized C structures and in the
   string representation defined above.</t>
        <artwork><![CDATA[
   /* Name string is a fully-qualified domain name */
   uuid_t NameSpace_DNS = { /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */
       0x6ba7b810,
       0x9dad,
       0x11d1,
       0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8
   };

   /* Name string is a URL */
   uuid_t NameSpace_URL = { /* 6ba7b811-9dad-11d1-80b4-00c04fd430c8 */
       0x6ba7b811,
       0x9dad,
       0x11d1,
       0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8
   };

   /* Name string is an ISO OID */
   uuid_t NameSpace_OID = { /* 6ba7b812-9dad-11d1-80b4-00c04fd430c8 */
       0x6ba7b812,
       0x9dad,
       0x11d1,
       0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8
   };

   /* Name string is an X.500 DN (in DER or a text output format) */
   uuid_t NameSpace_X500 = { /* 6ba7b814-9dad-11d1-80b4-00c04fd430c8 */
       0x6ba7b814,
       0x9dad,
       0x11d1,
       0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8
   };
]]></artwork>
      </section>
      <section anchor="creating_a_uuidv6_value">
        <name>Creating a UUIDv6 Value</name>
        <t>This section details a function in C which converts from a UUID version 1
to version 6:</t>
        <figure>
          <name>UUIDv6 Function in C</name>
          <artwork><![CDATA[
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <arpa/inet.h>
#include <uuid/uuid.h>

/* Converts UUID version 1 to version 6 in place. */
void uuidv1tov6(uuid_t u) {

  uint64_t ut;
  unsigned char *up = (unsigned char *)u;

  // load ut with the first 64 bits of the UUID
  ut = ((uint64_t)ntohl(*((uint32_t*)up))) << 32;
  ut |= ((uint64_t)ntohl(*((uint32_t*)&up[4])));

  // dance the bit-shift...
  ut =
    ((ut >> 32) & 0x0FFF) | // 12 least significant bits
    (0x6000) | // version number
    ((ut >> 28) & 0x0000000FFFFF0000) | // next 20 bits
    ((ut << 20) & 0x000FFFF000000000) | // next 16 bits
    (ut << 52); // 12 most significant bits

  // store back in UUID
  *((uint32_t*)up) = htonl((uint32_t)(ut >> 32));
  *((uint32_t*)&up[4]) = htonl((uint32_t)(ut));

}
]]></artwork>
        </figure>
      </section>
      <section anchor="creating_a_uuidv7_value">
        <name>Creating a UUIDv7 Value</name>
        <figure>
          <name>UUIDv7 Function in C</name>
          <artwork><![CDATA[
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <time.h>

// ...

// csprng data source
FILE *rndf;
rndf = fopen("/dev/urandom", "r");
if (rndf == 0) {
    printf("fopen /dev/urandom error\n");
    return 1;
}

// ...

// generate one UUIDv7E
uint8_t u[16];
struct timespec ts;
int ret;

ret = clock_gettime(CLOCK_REALTIME, &ts);
if (ret != 0) {
    printf("clock_gettime error: %d\n", ret);
    return 1;
}

uint64_t tms;

tms = ((uint64_t)ts.tv_sec) * 1000;
tms += ((uint64_t)ts.tv_nsec) / 1000000;

memset(u, 0, 16);

fread(&u[6], 10, 1, rndf); // fill everything after the timestamp with random bytes

*((uint64_t*)(u)) |= htonll(tms << 16); // shift time into first 48 bits and OR into place

u[8] = 0x80 | (u[8] & 0x3F); // set variant field, top two bits are 1, 0
u[6] = 0x70 | (u[6] & 0x0F); // set version field, top four bits are 0, 1, 1, 1
]]></artwork>
        </figure>
      </section>
      <section anchor="creating_a_uuidv8_value">
        <name>Creating a UUIDv8 Value</name>
        <t>UUIDv8 will vary greatly from implementation to implementation.</t>
        <t>The following example utilizes:</t>
        <ul spacing="normal">
          <li>32 bit custom-epoch timestamp (seconds elapsed since 2020-01-01 00:00:00
UTC)</li>
          <li>16 bit exotic resolution (~15 microsecond) subsecond timestamp encoded using
the fractional representation</li>
          <li>58 bit random number</li>
          <li>8 bit application-specific unique node ID</li>
          <li>8 bit rolling sequence number</li>
        </ul>
        <figure>
          <name>UUIDv8 Function in C</name>
          <artwork><![CDATA[
#include <stdint.h>
#include <time.h>

int get_random_bytes(uint8_t *buffer, int count) {
  // ...
}

int generate_uuidv8(uint8_t *uuid, uint8_t node_id) {
  struct timespec tp;
  if (clock_gettime(CLOCK_REALTIME, &tp) != 0)
    return -1; // real-time clock error

  // 32 bit biased timestamp (seconds elapsed since 2020-01-01 00:00:00 UTC)
  uint32_t timestamp_sec = tp.tv_sec - 1577836800;
  uuid[0] = timestamp_sec >> 24;
  uuid[1] = timestamp_sec >> 16;
  uuid[2] = timestamp_sec >> 8;
  uuid[3] = timestamp_sec;

  // 16 bit subsecond fraction (~15 microsecond resolution)
  uint16_t timestamp_subsec = ((uint64_t)tp.tv_nsec << 16) / 1000000000;
  uuid[4] = timestamp_subsec >> 8;
  uuid[5] = timestamp_subsec;

  // 58 bit random number and required ver and var fields
  if (get_random_bytes(&uuid[6], 8) != 0)
    return -1; // random number generator error
  uuid[6] = 0x80 | (uuid[6] & 0x0f);
  uuid[8] = 0x80 | (uuid[8] & 0x3f);

  // 8 bit application-specific node ID to guarantee application-wide uniqueness
  uuid[14] = node_id;

  // 8 bit rolling sequence number to help ensure process-wide uniqueness
  static uint8_t sequence = 0;
  uuid[15] = sequence++; // NOTE: unprotected from race conditions

  return 0;
}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="test_vectors">
      <name>Test Vectors</name>
      <t>Both UUIDv1 and UUIDv6 test vectors utilize the same 60 bit timestamp: 0x1EC9414C232AB00
(138648505420000000) Tuesday, February 22, 2022 2:22:22.000000 PM GMT-05:00</t>
      <t>Both UUIDv1 and UUIDv6 utilize the same values in clk_seq_hi_res, clock_seq_low,
and node. All of which have been generated with random data.</t>
      <figure>
        <name>Test Vector Timestamp Pseudo-code</name>
        <artwork><![CDATA[
# Unix Nanosecond precision to Gregorian 100-nanosecond intervals
gregorian_100_ns = (Unix_64_bit_nanoseconds / 100) + gregorian_Unix_offset

# Gregorian to Unix Offset:
# The number of 100-ns intervals between the
# UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00.
# gregorian_Unix_offset = 0x01b21dd213814000 or 122192928000000000

# Unix 64 bit Nanosecond Timestamp:
# Unix NS: Tuesday, February 22, 2022 2:22:22 PM GMT-05:00
# Unix_64_bit_nanoseconds = 0x16D6320C3D4DCC00 or 1645557742000000000

# Work:
# gregorian_100_ns = (1645557742000000000 / 100) + 122192928000000000
# (138648505420000000 - 122192928000000000) * 100 = Unix_64_bit_nanoseconds

# Final:
# gregorian_100_ns = 0x1EC9414C232AB00 or 138648505420000000

# Original: 000111101100100101000001010011000010001100101010101100000000
# UUIDv1:   11000010001100101010101100000000|1001010000010100|0001|000111101100
# UUIDv6:   00011110110010010100000101001100|0010001100101010|0110|101100000000
]]></artwork>
      </figure>
      <section anchor="uuidv1_example">
        <name>Example of UUIDv1 Value</name>
        <figure>
          <name>UUIDv1 Example Test Vector</name>
          <artwork><![CDATA[
----------------------------------------------
field                 bits    value
----------------------------------------------
time_low              32      0xC232AB00
time_mid              16      0x9414
time_hi_and_version   16      0x11EC
clk_seq_hi_res         8      0xB3
clock_seq_low          8      0xC8
node                  48      0x9E6BDECED846
----------------------------------------------
total                128
----------------------------------------------
final_hex: C232AB00-9414-11EC-B3C8-9E6BDECED846
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv3_example">
        <name>Example of UUIDv3 Value</name>
        <t>The MD5 computation from <xref target="sample_implementation"/> is detailed in <xref target="v3md5"/>
while the field mapping and all values are illustrated in <xref target="v3fields"/>.
Finally to further illustrate the bit swaping for version and variant see <xref target="v3vervar"/>.</t>
        <figure anchor="v3md5">
          <name>UUIDv3 Example MD5</name>
          <artwork><![CDATA[
Name Space (DNS):       6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:                   www.example.com
-----------------------------------------------
MD5:                    5df418813aed051548a72f4a814cf09e
]]></artwork>
        </figure>
        <figure anchor="v3fields">
          <name>UUIDv3 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------
field      bits    value
-------------------------------
md5_high   48      0x5df418813aed
ver         4      0x3
md5_mid    12      0x515
var         2      b10
md5_low    62      b00, 0x8a72f4a814cf09e
-------------------------------
total     128
-------------------------------
final: 5df41881-3aed-3515-88a7-2f4a814cf09e
]]></artwork>
        </figure>
        <figure anchor="v3vervar">
          <name>UUIDv3 Example Ver Var bit swaps</name>
          <artwork><![CDATA[
MD5 hex and dash:       5df41881-3aed-0515-48a7-2f4a814cf09e
Ver and Var Overwrite:  xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final:                  5df41881-3aed-3515-88a7-2f4a814cf09e
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv4_example">
        <name>Example of UUIDv4 Value</name>
        <t>This UUIDv4 example was created by generating 16 bytes
of random data resulting in the hex value of
919108F752D133205BACF847DB4148A8. This is then used to
fill out the feilds as shown in <xref target="v4fields"/>.</t>
        <t>Finally to further illustrate the bit swapping for version and variant see <xref target="v4vervar"/>.</t>
        <figure anchor="v4fields">
          <name>UUIDv4 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------
field      bits    value
-------------------------------
random_a   48      0x919108f752d1
ver         4      0x4
random_b   12      0x320
var         2      b10
random_c   62      b01, 0xbacf847db4148a8
-------------------------------
total      128
-------------------------------
final: 919108f7-52d1-4320-9bac-f847db4148a8
]]></artwork>
        </figure>
        <figure anchor="v4vervar">
          <name>UUIDv4 Example Ver/Var bit swaps</name>
          <artwork><![CDATA[
Random hex:             919108f752d133205bacf847db4148a8
Random hex and dash:    919108f7-52d1-3320-5bac-f847db4148a8
Ver and Var Overwrite:  xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final:                  919108f7-52d1-4320-9bac-f847db4148a8
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv5_example">
        <name>Example of UUIDv5 Value</name>
        <t>The SHA1 computation from <xref target="sample_implementation"/> is detailed in <xref target="v5sha1"/>
while the field mapping and all values are illustrated in <xref target="v5fields"/>.
Finally to further illustrate the bit swapping for version and variant and the unused/discarded part of the SHA1 value see <xref target="v5vervar"/>.</t>
        <figure anchor="v5sha1">
          <name>UUIDv5 Example SHA1</name>
          <artwork><![CDATA[
Name Space (DNS):       6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:                   www.example.com
-----------------------------------------------
SHA1:                   2ed6657de927468b55e12665a8aea6a22dee3e35
]]></artwork>
        </figure>
        <figure anchor="v5fields">
          <name>UUIDv5 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------
field      bits    value
-------------------------------
sha1_high  48      0x2ed6657de927
ver         4      0x5
sha1_mid   12      0x68b
var         2      b10
sha1_low   62      b01, 0x5e12665a8aea6a2
-------------------------------
total     128
-------------------------------
final: 2ed6657d-e927-568b-95e1-2665a8aea6a2
]]></artwork>
        </figure>
        <figure anchor="v5vervar">
          <name>UUIDv5 Example Ver/Var bit swaps and discarded SHA1 segment</name>
          <artwork><![CDATA[
SHA1 hex and dash:      2ed6657d-e927-468b-55e1-2665a8aea6a2-2dee3e35
Ver and Var Overwrite:  xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final:                  2ed6657d-e927-568b-95e1-2665a8aea6a2
Discarded:                                                  -2dee3e35
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv6_example">
        <name>Example of a UUIDv6 Value</name>
        <figure>
          <name>UUIDv6 Example Test Vector</name>
          <artwork><![CDATA[
-----------------------------------------------
field                 bits    value
-----------------------------------------------
time_high              32     0x1EC9414C
time_mid               16     0x232A
time_low_and_version   16     0x6B00
clk_seq_hi_res          8     0xB3
clock_seq_low           8     0xC8
node                   48     0x9E6BDECED846
-----------------------------------------------
total                 128
-----------------------------------------------
final_hex: 1EC9414C-232A-6B00-B3C8-9E6BDECED846
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv7_example">
        <name>Example of a UUIDv7 Value</name>
        <t>This example UUIDv7 test vector utilizes a well-known 32 bit Unix epoch with
additional millisecond precision to fill the first 48 bits</t>
        <t>rand_a and rand_b are filled with random data.</t>
        <t>The timestamp is Tuesday, February 22, 2022 2:22:22.00 PM GMT-05:00 represented
as 0x17F22E279B0 or 1645557742000</t>
        <figure>
          <name>UUIDv7 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------
field      bits    value
-------------------------------
unix_ts_ms   48    0x17F22E279B0
ver           4    0x7
rand_a       12    0xCC3
var           2    b10
rand_b       62    b01, 0x8C4DC0C0C07398F
-------------------------------
total       128
-------------------------------
final: 017F22E2-79B0-7CC3-98C4-DC0C0C07398F
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv8_example">
        <name>Example of a UUIDv8 Value</name>
        <t>This example UUIDv8 test vector utilizes a well-known 64 bit Unix epoch with
nanosecond precision, truncated to the least-significant, right-most, bits
to fill the first 48 bits through version.</t>
        <t>The next two segments of custom_b and custom_c are are filled with random
data.</t>
        <t>Timestamp is Tuesday, February 22, 2022 2:22:22.000000 PM GMT-05:00 represented
as 0x16D6320C3D4DCC00 or 1645557742000000000</t>
        <t>It should be noted that this example is just to illustrate one scenario for
UUIDv8. Test vectors will likely be implementation specific and vary greatly
from this simple example.</t>
        <figure>
          <name>UUIDv8 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------
field      bits    value
-------------------------------
custom_a     48    0x320C3D4DCC00
ver           4    0x8
custom_b     12    0x75B
var           2    b10
custom_c     62    b00, 0xEC932D5F69181C0
-------------------------------
total       128
-------------------------------
final: 320C3D4D-CC00-875B-8EC9-32D5F69181C0
]]></artwork>
        </figure>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
gQur5EKGF2oFX7V/gT2Yb+eMboE+kSqx3VgvEuYfVL+N78QkN3MhV4gbQbk1
LxG5In8ZcZRO4WPVTS75SzWHUEOzUbFjPSfaxeUwjyViXA5IQ9AN0ohNeMdR
44Ur4srMv3L27Mdtsa5vdcs+n4/oOqSGfDRBiqxiPK1QDXtCXIG+PHZBYdIT
nTfdkYbzeOCLyIoWQTy7BYSNHgsoBKt0JH9aOoJpnBUCalK1I8AoLbNDBmo1
HzWCamE5F4dDxpGpVtPNJaGBzdIVMsPqptJfAI4No5bZKW7JSygoLnGP2H19
+3xPiHZnt9uhKyPlgoNNX4i4wRciSyAZ4UlG0qHZhzRahCofLlbsLeNCecZq
arS4KeKs5nskGtJPr2KrZzhTH8+7TfX2dMz21X6YX4Zjf2NNmI/Kenz86mQ8
G5qr/a2vsX+H54Rhv7yJ82179aMdZpjOI7DOWXQtPnKNgOKIEm99bR5ljDi4
O8C7SZFhq2lLbE0WaJqdb5wQtz7tMng2hpz1ySrPyRVWhJJYEM/6+QURVzMi
HGKfFvxXLQ/3QNM4Fs01W+9S1oNah0wfreVsv4SulzH3MmInQL7w6ByzoCr2
elEfRpOmsOz2kA5ir6q3iCuxLuFCzFUp9haOYHmceTdj2qhCnTdaXsYSMflL
spZn3CbxTTIo86CanMEmp1QYWUVzmZK3HirdSQ1vBASo0TSo5eBrYxO+LRfM
3pYiDrMhuylK6JD9NC9uJa+MEz1s3j21DmsWfr9gO00hYs6ipSfq3TwaCDuf
ym+B+Bpwu9qHR3yLY2JRrWP7YR2DoEoEWFxgbBSQdbH53mepmPHRQOoScREc
xZoq7UFJ/G0RIQVIKQFjKU1B5IuAewg8f/b2jN88t+drKTmqPXl1uVG5oCKI
bEmEdZTTfopHtMDA6pMzhok2ZBaD8+fap6x67NPt1dAV4ZPuoaa9YbWOZdbD
+oq6IXwGF3lDs/t7g091R9XXQkV/R1rK3h2RZSFcOKsdsp/MQOJ9CV+fHE+v
WDukVSU43w79VNIjZxYOHDsa5NdVYhJkuoWLE27WwHEicn7ij82ZQjfK7Qgu
jol9mESfjX2Gpk5pHlRYUW6Jq7oUBWUCgk55s1yXTCClS4QoSZdyk4jHFFjH
iSYFcQnvnE1cemMQJM55i/2pOYAoi+FDcKWqp4I2FCNIjj86a5lmS3IHz82Y
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
wrfbR4YmqdvlSTfCFEo64m8WdDZW9GTVyI0F9fbPQ1o2SSXb3hvWFXdte+tM
bf8lxP/CWOVTUh4Yg7b6LdO5Z7zS519cW6X1on68ZqdkmKj3D/imOnfIhtfX
Lc0y0aIhN3Ch3bNrlR6X9vCzI1p6s7yTfLlwpQEV09emiirU0cGw1+sd9kBm
Bm0hM/1ub6+5NxoNB/FBbxQNu6UvS5vfrn+1tFedunY1MG52lme5vPi94ajX
OTzsNHejeNjc3evsNQ8Po4Nmd9SL6LIdjNpPYq/aRq2cqeRVN2dqGs61Xrcm
BtRTcK5VWXAP3HD68twHTObuU1cAcp5yAkGYbEQNDBYyzl2xai09zYmhOdGw
1nk/8QkAc5vmTTP+rUjFaosO+BJAdkMhmfJQhQ2AjAznEhLnpRFyHYQVvxVf
f7Gbp+7yqd4/1SvoZ9xCYC8ssapb8scPb1YuDe/KS+t89dI6f7elzZC5xrzz
cQVL68O78vq6X72+7t9xfVpb/pRu4Zl5TqInZzLj1F+a91sEhe2VEPgRHZRB
0PtqEPR+dRB4iuSyCUW2CqNNIDTQNxcROxNc7V9wRlmfQsjXeCyiZCLHXdPH
EfhOVA2lXgS5dWUoFf/pcGIs+9e+Fo75P2Uud1XcMhG5ykN6Umedi7J5tJMg
H2X5OZa1I0zw75VTOrGzLU/ThLNk2WjCSfRKTnlXnSK92vesJwQcQHzB6h48
EuGlbBh6vJiXArvk4fZCEXVnx0zSCDmWfFia1I3c75VcUW32gUUh8qQOui1O
Fo/lyW73oqC+59vb23A7YMMXf/LXL33zzWL+p96ft7e3/byGkRTH4DIAzXyc
jIpWq2XnIChKXRRhZBpHkJm/4vNOV8pjhqn5eUX6JR0HCKvS2ALflqEN++7a
6DT5jyPo2v5TjgjotsOu8SEtv9t2H9pv2tUPO/vhh/LdXlf0dLSCam0BbawQ
kugmDmhJZm6HqnvhXLLc420PNeHF6rai/jPdoM/2FN0dkQBbTOLvHunxfhme
UanzXksIDlYSgoOAEDz4sC4nGag9wbV5C5xlnY7ojmEc498G+TyzeSQl+9D6
mpiUstkQIgn+8QaRnWF8tbMQfQWbj1hGgiVE2pHc5QwilvXlT034paSuUwEL
TZdincIpOk/uVG3gVwcvSNqmzg9BENQWFmgapOBp/tQGxIn5k/518ZKqqtg6
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

-->

</rfc>
