Network Working Group C. Bormann Internet-Draft Universität Bremen TZI Intended status: Informational 11 February 2026 Expires: 15 August 2026 Notable CBOR Tags draft-bormann-cbor-notable-tags-15 Abstract The Concise Binary Object Representation (CBOR, RFC 8949) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. In CBOR, one point of extensibility is the definition of CBOR tags. RFC 8949's original edition, RFC 7049, defined a basic set of 16 tags as well as a registry that can be used to contribute additional tag definitions [IANA.cbor-tags]. Since RFC 7049 was published, at the time of writing some 250 definitions of tags and ranges of tags have been added to that registry. The present document provides a roadmap to a large subset of these tag definitions. Where applicable, it points to an IETF standards or standard development document that specifies the tag. Where no such document exists, the intention is to collect specification information from the sources of the registrations. After some more development, the present document is intended to be useful as a reference document for the IANA registrations of the CBOR tags the definitions of which have been collected. Note to Readers This is an individual submission to the CBOR working group of the IETF, https://datatracker.ietf.org/wg/cbor/about/ (https://datatracker.ietf.org/wg/cbor/about/). Discussion currently takes places on the github repository https://github.com/cabo/ notable-tags (https://github.com/cabo/notable-tags). If the CBOR WG believes this is a useful document, discussion is likely to move to the CBOR WG mailing list and a github repository at the CBOR WG github organization, https://github.com/cbor-wg (https://github.com/ cbor-wg). The current version is true work in progress; some of the sections haven't been filled in yet, and in particular, permission has not been obtained from all authors of registered tag definitions to copy over their text. Bormann Expires 15 August 2026 [Page 1] Internet-Draft Notable CBOR Tags February 2026 Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on 15 August 2026. Copyright Notice Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. The CBOR Tags Registry . . . . . . . . . . . . . . . . . 4 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 2. RFC 7049 (original CBOR specification) . . . . . . . . . . . 5 2.1. Tags Related to Those Defined in RFC 7049 . . . . . . . . 6 2.2. Tags from RFC 7049 not listed in RFC 8949 . . . . . . . . 7 3. Security . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1. COSE . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.1. Tags for Bare Hash Values . . . . . . . . . . . . . . 9 3.2. RFC 8392 (CWT) . . . . . . . . . . . . . . . . . . . . . 11 4. CBOR-based Representation Formats . . . . . . . . . . . . . . 11 4.1. YANG-CBOR . . . . . . . . . . . . . . . . . . . . . . . . 11 5. Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.1. DOTS . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.2. RAINS . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Bormann Expires 15 August 2026 [Page 2] Internet-Draft Notable CBOR Tags February 2026 6. Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . 13 6.1. Advanced arithmetic . . . . . . . . . . . . . . . . . . . 13 6.2. Variants of undefined . . . . . . . . . . . . . . . . . . 15 6.3. Typed and Homogeneous Arrays . . . . . . . . . . . . . . 15 7. Domain-Specific . . . . . . . . . . . . . . . . . . . . . . . 16 7.1. Human-readable Text . . . . . . . . . . . . . . . . . . . 18 7.2. Extended Time Formats . . . . . . . . . . . . . . . . . . 19 8. Platform-oriented . . . . . . . . . . . . . . . . . . . . . . 20 8.1. Perl . . . . . . . . . . . . . . . . . . . . . . . . . . 20 8.2. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 21 8.3. Weird text encodings . . . . . . . . . . . . . . . . . . 21 9. Application-specific . . . . . . . . . . . . . . . . . . . . 22 9.1. Enumerated Alternative Data Items . . . . . . . . . . . . 23 9.1.1. Semantics . . . . . . . . . . . . . . . . . . . . . . 25 9.1.2. Rationale . . . . . . . . . . . . . . . . . . . . . . 25 9.1.3. Examples . . . . . . . . . . . . . . . . . . . . . . 26 10. Implementation aids . . . . . . . . . . . . . . . . . . . . . 27 10.1. Invalid Tag . . . . . . . . . . . . . . . . . . . . . . 27 10.2. Programming Aid for Simple Values . . . . . . . . . . . 27 10.3. Test Tag . . . . . . . . . . . . . . . . . . . . . . . . 28 10.3.1. Semantics . . . . . . . . . . . . . . . . . . . . . 28 10.3.2. Sample code . . . . . . . . . . . . . . . . . . . . 28 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 12. Security Considerations . . . . . . . . . . . . . . . . . . . 30 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 13.1. Normative References . . . . . . . . . . . . . . . . . . 30 13.2. Informative References . . . . . . . . . . . . . . . . . 32 List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . 36 List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . 36 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 36 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 37 1. Introduction (TO DO, expand on text from abstract here; move references here and neuter them in the abstract as per Section 4.3 of [RFC7322].) The selection of the tags presented here is somewhat arbitrary; considerations such as how wide the scope and area of application of a tag definition is combine with an assessment how "ready to use" the tag definition is (i.e., is the tag specification in a state where it can be used). This document can only be a snapshot of a subset of the current registrations. The most up to date set of registrations is always available in the registry "CBOR Tags" [IANA.cbor-tags]. Bormann Expires 15 August 2026 [Page 3] Internet-Draft Notable CBOR Tags February 2026 1.1. The CBOR Tags Registry CBOR tags are an extension point of CBOR, and that extension point is managed through an IANA registry ([IANA.cbor-tags] as set up in Section 9.2 of RFC 8949 [STD94]), not through publishing documents. Some tag ranges require a stable specification to be publicly available under the "Specification Required" policy (Section 4.6 of RFC 8126 [BCP26]). That stable availability can be provided by any suitable means, such as a (specific revision of a) GitHub repository, a document published by an SDO or other entity, or even by a specific revision of an Internet-Draft, or an RFC if that happens to be in the pipeline. (In the latter case, while the RFC is being developed, the allocation will probably be made when that RFC still is in Internet- Draft state, which is then referenced in the registry and is usually updated to the RFC number when that is published.) An example for this is provided by Section 9.1 of the present document. A few allocations were made for these tags (101, 121-127, 1280-1400) that are now a permanent part of the CBOR Tags registry. These allocations do reference revision –07 of the present Internet- Draft, because that contains an explanation of what these tags are supposed to be used for. That document revision –07 is part of the permanent record of the IETF and is not going away, so we are able to use it as a stable part of the information provided with the allocation. (In more recent revisions of the present document, some glue text was updated and a clerical error in illustrative CDDL code was fixed; eventually, there may be some incentive to update the registry entry to a newer revision of the present document.) As with other stable specifications referenced this way, there is no need for the present document to be a published RFC before the tags become useful; i.e., the publication action that makes the tag numbers available for wide use in interchange is the acceptance of the tags into the IANA CBOR Tags registry. | One example of an Internet-Draft-based specification document | that eventually did get published as an RFC is given by the | CBOR Tags for Time, Duration, and Period [RFC9581]. These were | originally registered around 2017 (under the original policy | for these registrations) with a reference to | [I-D.draft-bormann-cbor-time-tag-01]. Over time, the document | evolved into a WG document without a need to update the | reference. The registration was finally updated to point to | [RFC9581] when that was published, which was also the time | additional registries were created for some of the inner | workings of the time tags. Bormann Expires 15 August 2026 [Page 4] Internet-Draft Notable CBOR Tags February 2026 1.2. Terminology The definitions of [STD94] apply. Specifically: The term "byte" is used in its now customary sense as a synonym for "octet"; "byte strings" are CBOR data items carrying a sequence of zero or more (binary) bytes, while "text strings" are CBOR data items carrying a sequence of zero or more Unicode scalar values (code points that can be part of a string of Unicode characters), encoded in UTF-8 [STD63]. Where bit arithmetic is explained, this document uses the notation familiar from the programming language C ([C], including C++14's 0bnnn binary literals [Cplusplus20]), except that superscript notation (example for two to the power of 64: 2^64) denotes exponentiation; in the plain text version of this document, superscript notation is rendered in paragraph text by C-incompatible surrogate notation as seen in this example. Ranges expressed using .. are inclusive of the limits given. Type names such as "int", "bigint" or "decfrac" are taken from Appendix D of [RFC8610], the Concise Data Definition Language (CDDL). 2. RFC 7049 (original CBOR specification) [RFC7049] defines a number of tags that are listed here for convenience only. +============+=============+=======================+============+ | Tag number | Tag content | Short Description | Section of | | | | | RFC 7049 | +============+=============+=======================+============+ | 0 | UTF-8 | Standard date/time | 2.4.1 | | | string | string | | +------------+-------------+-----------------------+------------+ | 1 | multiple | Epoch-based date/time | 2.4.1 | +------------+-------------+-----------------------+------------+ | 2 | byte string | Positive bignum | 2.4.2 | +------------+-------------+-----------------------+------------+ | 3 | byte string | Negative bignum | 2.4.2 | +------------+-------------+-----------------------+------------+ | 4 | array | Decimal fraction | 2.4.3 | +------------+-------------+-----------------------+------------+ | 5 | array | Bigfloat | 2.4.3 | +------------+-------------+-----------------------+------------+ | 21 | multiple | Expected conversion | 2.4.4.2 | | | | to base64url encoding | | +------------+-------------+-----------------------+------------+ | 22 | multiple | Expected conversion | 2.4.4.2 | | | | to base64 encoding | | +------------+-------------+-----------------------+------------+ | 23 | multiple | Expected conversion | 2.4.4.2 | Bormann Expires 15 August 2026 [Page 5] Internet-Draft Notable CBOR Tags February 2026 | | | to base16 encoding | | +------------+-------------+-----------------------+------------+ | 24 | byte string | Encoded CBOR data | 2.4.4.1 | | | | item | | +------------+-------------+-----------------------+------------+ | 32 | UTF-8 | URI | 2.4.4.3 | | | string | | | +------------+-------------+-----------------------+------------+ | 33 | UTF-8 | base64url | 2.4.4.3 | | | string | | | +------------+-------------+-----------------------+------------+ | 34 | UTF-8 | base64 | 2.4.4.3 | | | string | | | +------------+-------------+-----------------------+------------+ | 35 | UTF-8 | Regular expression | 2.4.4.3 | | | string | | | +------------+-------------+-----------------------+------------+ | 36 | UTF-8 | MIME message | 2.4.4.3 | | | string | | | +------------+-------------+-----------------------+------------+ | 55799 | multiple | Self-describe CBOR | 2.4.5 | +------------+-------------+-----------------------+------------+ Table 1: Tag numbers defined in RFC 7049 2.1. Tags Related to Those Defined in RFC 7049 Separately registered tags that are directly related to the tags predefined in RFC 7049 include: * Tag 63, registered by this document (Section 11), is a parallel to tag 24, with the single difference that its byte string tag content carries a CBOR Sequence [RFC8742] instead of a single encoded CBOR data item. * Tag 108, registered by this document (Section 11), is a parallel to tag 23, with the single difference that the hexadecimal form uses lowercase instead of uppercase letters. Bormann Expires 15 August 2026 [Page 6] Internet-Draft Notable CBOR Tags February 2026 Note that tag 23 has a serialization that is one byte shorter than tag 108, so if all else is equal, tag 23 (and thus upper case hex) would be chosen as it is slightly more efficient than tag 108. However, designers of CBOR protocols that use one of these tags often have reason to prefer lowercase hex in the application they are trying to be compatible with, in which case 108 provides a solution that is only one byte more expensive. * Tag 257, registered by Peter Occil with a specification in http://peteroupc.github.io/CBOR/binarymime.html (http://peteroupc.github.io/CBOR/binarymime.html), is a parallel to tag 36, except that the tag content is a byte string, which therefore can also carry binary MIME messages as per [RFC2045]. * Tag 21065, having been registered by this document (Section 11), is a parallel to tag 35, with the difference that its text string tag content carries an I-Regexp regular expression [RFC9485] instead of a regexp of a more unspecified flavor. Companion tag 21066, having been registered by Joe Hildebrand with a specification in https://github.com/hildjj/cbor-specs/blob/main/ regexp.md (https://github.com/hildjj/cbor-specs/blob/main/ regexp.md), is the equivalent for JavaScript (ECMA262), but besides the regular expression itself also can include the regular expression flags as a separate item. 2.2. Tags from RFC 7049 not listed in RFC 8949 Appendix G.3 of RFC 8949 [STD94] states: | Tag 35 is not defined by this document; the registration based on | the definition in RFC 7049 remains in place. The reason for this exclusion is that the definition of Tag 35 in Section 2.4.4.3 of [RFC7049], leaves too much open to ensure interoperability: | Tag 35 is for regular expressions in Perl Compatible Regular | Expressions (PCRE) / JavaScript syntax [ECMA262]. Not only are two partially incompatible specifications given for the semantics, JavaScript regular expressions have also developed significantly within the decade since JavaScript 5.1 (which was referenced as "ECMA262" by [RFC7049]), making it less reliable to assume that a producing application will manage to stay within that 2011 subset. Bormann Expires 15 August 2026 [Page 7] Internet-Draft Notable CBOR Tags February 2026 Nonetheless, the registration is in place, so it is available for applications that simply want to mark a text string as being a regular expression roughly of the PCRE/Javascript flavor families. See also Tag 21065 and 21066 above. 3. Security A number of CBOR tags are defined in security specifications that make use of CBOR. 3.1. COSE CBOR Object Signing and Encryption (COSE) is defined in a number of RFCs. [RFC8152] was the initial specification, set up the registries, and populated them with an initial set of assignments. A revision split this specification into the data structure definitions (RFC9052), an Internet Standard [STD96], and a separate document defining the representation for the algorithms employed [RFC9053], which is expected to be updated more frequently than the COSE format itself. [RFC9054] added a separate set of algorithms for cryptographic hash functions (Hash functions have been a component of some [RFC9053] combined algorithms but weren't originally assigned separate codepoints themselves). A revised COSE counter signature structure was defined in RFC9338, another part of [STD96]; this also defines a tag for these. Bormann Expires 15 August 2026 [Page 8] Internet-Draft Notable CBOR Tags February 2026 +============+=======================+============================+ | Tag number | Tag content | Short Description | +============+=======================+============================+ | 16 | COSE_Encrypt0 | COSE Single Recipient | | | | Encrypted Data Object | +------------+-----------------------+----------------------------+ | 17 | COSE_Mac0 | COSE Mac w/o Recipients | | | | Object | +------------+-----------------------+----------------------------+ | 18 | COSE_Sign1 | COSE Single Signer Data | | | | Object | +------------+-----------------------+----------------------------+ | 19 | COSE_Countersignature | COSE standalone V2 | | | | countersignature (RFC9338) | +------------+-----------------------+----------------------------+ | 96 | COSE_Encrypt | COSE Encrypted Data Object | +------------+-----------------------+----------------------------+ | 97 | COSE_Mac | COSE MACed Data Object | +------------+-----------------------+----------------------------+ | 98 | COSE_Sign | COSE Signed Data Object | +------------+-----------------------+----------------------------+ Table 2: Tag numbers defined in RFC9052, COSE, and RFC 9338 3.1.1. Tags for Bare Hash Values [RFC9054] does not define CBOR tags for cryptographic Hash values; it rightly notes that Hash values are often used in structures that are application-specific and should be defined with those applications. However, there are many cases where just a bare hash value is required, and for these cases common tags are useful. In one use case, these tags occur in a data structure that is specified to indicate elision by using one of these tags as an alternative to some other data structure. To enable agility, tags need to indicate the hash function used, preferably using the COSE algorithms registry as populated by [RFC9054]. | (Note that there is another registry, "Named Information Hash | Algorithm Registry" [IANA.named-information], that also defines | numbers for some hash algorithms. We are not using this | registry here, as more recent entries seem to have stopped | assigning numbers. If desired, tags that employ this registry | could be added later.) Bormann Expires 15 August 2026 [Page 9] Internet-Draft Notable CBOR Tags February 2026 The codepoint range available for the COSE algorithms registry is large, but the most likely range to be used for standard Hash functions is "Integer values between -256 and 255", which have the registry policy "Standards Action With Expert Review" (Section 16.4 of [RFC8152], Registry "COSE Algorithms" [IANA.cose]). To this end, the present document registers a range of 512 tags from 18300 to 18811 (inclusive), paralleling the algorithm identifier range of -256 .. 255 (inclusive). The tag number for COSE algorithm number N is then defined to be 18556+N, except for N = 0 (see below). The tag value is a CBOR byte string, with the exception N = 0. For example, in [IANA.cose] SHA-256 has the COSE algorithm identifier -16. This is in the range -256 .. 255 (inclusive range). Therefore, tag 18540 (= 18556 + (-16)) is the tag for a byte string containing a SHA-256 hash. As a special case, there is one exception: Tag 18556 (= 18556 + 0) stands for the combination of a an explicit numeric COSE algorithm identifier with a hash value in an array, analogous to the use of COSE_CertHash in [RFC9360]: Standard_COSE_Hash = #6.(value) General_COSE_Hash = #6.([ hashAlg: alg .within (int .ne directhash / tstr), hashValue: value .within bstr ]) hashmiddle = 18556 directhash = (-256 .. -1) / (1 .. 255) Figure 1: Generic CDDL for Tags for Bare Hash Values An example for the SHA-256 hash of "hello world" in CBOR diagnostic notation: 18540( h'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9') The same in CBOR pretty printed hex: =============== NOTE: '\' line wrapping per RFC 8792 ================ d9 486c # tag(18540) 58 20 # bytes(32) \ b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 Bormann Expires 15 August 2026 [Page 10] Internet-Draft Notable CBOR Tags February 2026 As none has been registered, no real example can be given for a hash algorithm with an identifier not in the standard range, but if -4711 were such an identifier, a hash with an explicit algorithm number could look like: 18556([-4711, h'1234123412341234123412341234123412341234']) Note that not all tags assigned in this section do parallel an algorithm that is a cryptographic hash algorithm. Where this is not the case, there currently is no defined semantics for this tag, but the tags are assigned anyway. The semantics of tags that parallel algorithm assignments other than for cryptographic hash functions could be defined by a future version of this specification. Note also that the cryptographic hashes in the content of the tag are not protected; any further protection (confidentiality, integrity) needs to be provided in the surrounding data structure, storage system, or communication channel. 3.2. RFC 8392 (CWT) [RFC8392] defines the CBOR Web Token (CWT), making use of COSE to define a CBOR variant of the JOSE Web Token (JWT), [RFC7519], a standardized security token that has found use in the area of web applications, but is not technically limited to those. +============+======================+======================+ | Tag number | Tag content | Short Description | +============+======================+======================+ | 61 | CBOR Web Token (CWT) | CBOR Web Token (CWT) | +------------+----------------------+----------------------+ Table 3: Tag number defined for RFC 8392 CBOR Web Token (CWT) 4. CBOR-based Representation Formats Representation formats can be built on top of CBOR. 4.1. YANG-CBOR YANG [RFC7950] is a data modeling language originally designed in the context of the Network Configuration Protocol (NETCONF) [RFC6241], now widely used for modeling management and configuration information. [RFC7950] defines an XML-based representation format, and [RFC7951] defines a JSON-based [RFC8259] representation format for YANG. Bormann Expires 15 August 2026 [Page 11] Internet-Draft Notable CBOR Tags February 2026 YANG-CBOR [RFC9254] is a representation format for YANG data in CBOR. +========+======================+=====================+============+ | Tag | Tag content | Short Description | Section of | | number | | | YANG-CBOR | +========+======================+=====================+============+ | 43 | byte string | YANG bits datatype | 6.7 | +--------+----------------------+---------------------+------------+ | 44 | unsigned integer | YANG enumeration | 6.6 | | | | datatype | | +--------+----------------------+---------------------+------------+ | 45 | unsigned integer or | YANG identityref | 6.10 | | | text string | datatype | | +--------+----------------------+---------------------+------------+ | 46 | unsigned integer or | YANG instance- | 6.13 | | | text string or array | identifier datatype | | +--------+----------------------+---------------------+------------+ | 47 | unsigned integer | YANG Schema Item | 3.2 | | | | iDentifier (sid) | | +--------+----------------------+---------------------+------------+ Table 4: Tag numbers defined for YANG-CBOR [I-D.bormann-cbor-yang-standin] proposes to employ additional tags to enable the use of efficient binary encodings for certain frequently used YANG data types [RFC9911]. 5. Protocols Protocols may want to allocate CBOR tag numbers to identify specific protocol elements. 5.1. DOTS DDoS Open Threat Signaling (DOTS) defines tag number 271 for the DOTS signal channel object in [RFC9132]. 5.2. RAINS As an example for how experimental protocols can make use of CBOR tag definitions, the RAINS (Another Internet Naming Service) Protocol Specification defines tag number 15309736 for a RAINS Message [I-D.trammell-rains-protocol]. (The seemingly random tag number was chosen so that, when represented as an encoded CBOR tag argument, it contains the Unicode character "雨" (U+96E8) in UTF-8, which represents rain in a number of languages.) Bormann Expires 15 August 2026 [Page 12] Internet-Draft Notable CBOR Tags February 2026 6. Datatypes 6.1. Advanced arithmetic General information about the representation of numbers in CBOR can be found in [STD94] as well as [I-D.bormann-cbor-numbers]. A number of tags have been registered for arithmetic representations beyond those built into CBOR and defined by tags in [RFC7049]. These are all documented under http://peteroupc.github.io/CBOR/; the last pathname component for the URL is given in the column "Reference" of Table 5. +============+=============+=======================+===============+ | Tag number | Tag content | Short Description | Reference | +============+=============+=======================+===============+ | 30 | array | Rational number | rational.html | +------------+-------------+-----------------------+---------------+ | 264 | array | Decimal fraction with | bigfrac.html | | | | arbitrary exponent | | +------------+-------------+-----------------------+---------------+ | 265 | array | Bigfloat with | bigfrac.html | | | | arbitrary exponent | | +------------+-------------+-----------------------+---------------+ | 268 | array | Extended decimal | extended.html | | | | fraction | | +------------+-------------+-----------------------+---------------+ | 269 | array | Extended bigfloat | extended.html | +------------+-------------+-----------------------+---------------+ | 270 | array | Extended rational | extended.html | | | | number | | +------------+-------------+-----------------------+---------------+ Table 5: Tags for advanced arithmetic CBOR's basic generic data model (Section 2 of RFC 8949 [STD94]) has a number system with limited-range integers (major types 0 and 1: -2^64..2^64-1) and floating point numbers that cover binary16, binary32, and binary64 (including non-finites) from [IEEE754]. With the tags defined with [RFC7049], the extended generic data model (Section 2.1 of RFC 8949 [STD94]) adds unlimited-range integers (tag numbers 2 and 3, "bigint" in CDDL) as well as floating point values using the bases 2 (tag number 5, "bigfloat") and 10 (tag number 4, "decfrac"). This pre-defined number system has a number of limitations that are addressed in three of the tags discussed here: Bormann Expires 15 August 2026 [Page 13] Internet-Draft Notable CBOR Tags February 2026 * Tag number 30 allows the representation of rational numbers as a ratio of two integers: a numerator (usually written as the top part of a fraction), and a denominator (the bottom part), where both integers can be limited-range basic and unlimited-range integers. The mathematical value of a rational number is the numerator divided by the denominator. This tag can express all numbers that the extended generic data model of [RFC7049] can express, except for non-finites [IEEE754]; it also can express rational numbers that cannot be expressed with denominators that are a power of 2 or a power of 10. For example, the rational number 1/3 is encoded: d8 1e ---- Tag 30 82 ---- Array length 2 01 ---- 1 03 ---- 3 Many programming languages have built-in support for rational numbers or support for them is included in their standard libraries; tag number 30 is a way for these platforms to interchange these rational numbers in CBOR. * Tag numbers 4 and 5 are limited in the range of the (base 10 or base 2) exponents by the limited-range integers in the basic generic data model. Tag numbers 264 and 265 are exactly equivalent to 4 and 5, respectively, but also allow unlimited- range integers as exponents. While applications for floating point numbers with exponents outside the CBOR basic integer range are limited, tags 264 and 265 allow unlimited roundtripping with other formats that allow very large or very small exponents, such as those JSON [RFC8259] can provide if the limitations of I-JSON [RFC7493] do not apply. The tag numbers 268..270 extend these tags further by providing a way to express non-finites within a tag with this number. This does not increase the expressiveness of the data model (the non-finites can already be expressed using major type 7 floating point numbers), but does allow both finite and non-finite values to carry the same tag. In most applications, a choice that includes some of the three tags 30, 264, 265 for finite values and major type 7 floating point values for non-finites (as well as possibly other parts of the CBOR number system) will be the preferred solution. This document suggests using the CDDL typenames defined in Figure 2 for the three most useful tag numbers in this section. Bormann Expires 15 August 2026 [Page 14] Internet-Draft Notable CBOR Tags February 2026 rational = #6.30([numerator: integer, denominator: integer .ne 0]) rational_of = #6.30([numerator: N, denominator: D]) ; the value 1/3 can be notated as rational_of<1, 3> extended_decfrac = #6.264([e10: integer, m: integer]) extended_bigfloat = #6.265([e2: integer, m: integer]) Figure 2: CDDL for extended arithmetic tags 6.2. Variants of undefined https://github.com/svaarala/cbor-specs/blob/master/cbor-absent- tag.rst defines tag 31 to be applied to the CBOR value Undefined (0xf7), slightly modifying its semantics to stand for an absent value in a CBOR Array. (TO DO: Obtain permission to copy the definitions here.) 6.3. Typed and Homogeneous Arrays [RFC8746] defines tags for various kinds of arrays. A summary is reproduced in Table 6. +======+=============+=============================================+ | Tag | Data Item | Semantics | +======+=============+=============================================+ | 64 | byte string | uint8 Typed Array | +------+-------------+---------------------------------------------+ | 65 | byte string | uint16, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 66 | byte string | uint32, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 67 | byte string | uint64, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 68 | byte string | uint8 Typed Array, clamped arithmetic | +------+-------------+---------------------------------------------+ | 69 | byte string | uint16, little endian, Typed Array | +------+-------------+---------------------------------------------+ | 70 | byte string | uint32, little endian, Typed Array | +------+-------------+---------------------------------------------+ | 71 | byte string | uint64, little endian, Typed Array | +------+-------------+---------------------------------------------+ | 72 | byte string | sint8 Typed Array | +------+-------------+---------------------------------------------+ | 73 | byte string | sint16, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 74 | byte string | sint32, big endian, Typed Array | +------+-------------+---------------------------------------------+ Bormann Expires 15 August 2026 [Page 15] Internet-Draft Notable CBOR Tags February 2026 | 75 | byte string | sint64, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 76 | byte string | (reserved) | +------+-------------+---------------------------------------------+ | 77 | byte string | sint16, little endian, Typed Array | +------+-------------+---------------------------------------------+ | 78 | byte string | sint32, little endian, Typed Array | +------+-------------+---------------------------------------------+ | 79 | byte string | sint64, little endian, Typed Array | +------+-------------+---------------------------------------------+ | 80 | byte string | IEEE 754 binary16, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 81 | byte string | IEEE 754 binary32, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 82 | byte string | IEEE 754 binary64, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 83 | byte string | IEEE 754 binary128, big endian, Typed Array | +------+-------------+---------------------------------------------+ | 84 | byte string | IEEE 754 binary16, little endian, Typed | | | | Array | +------+-------------+---------------------------------------------+ | 85 | byte string | IEEE 754 binary32, little endian, Typed | | | | Array | +------+-------------+---------------------------------------------+ | 86 | byte string | IEEE 754 binary64, little endian, Typed | | | | Array | +------+-------------+---------------------------------------------+ | 87 | byte string | IEEE 754 binary128, little endian, Typed | | | | Array | +------+-------------+---------------------------------------------+ | 40 | array of | Multi-dimensional Array, row-major order | | | two arrays* | | +------+-------------+----------------