idnits 2.17.1 draft-bormann-cbor-notable-tags-06.txt: -(3): Line appears to be too long, but this could be caused by non-ascii characters in UTF-8 encoding Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == There are 3 instances of lines with non-ascii characters in the document. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 69 instances of too long lines in the document, the longest one being 30 characters in excess of 72. == There are 9 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (23 February 2022) is 794 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- == Missing Reference: 'ECMA262' is mentioned on line 234, but not defined == Unused Reference: 'I-D.clarke-cbor-crs' is defined on line 1012, but no explicit reference was found in the text == Unused Reference: 'RFC4122' is defined on line 1058, but no explicit reference was found in the text == Outdated reference: A later version (-20) exists of draft-ietf-core-yang-cbor-18 ** Obsolete normative reference: RFC 8152 (Obsoleted by RFC 9052, RFC 9053) == Outdated reference: A later version (-12) exists of draft-ietf-cbor-time-tag-00 -- Obsolete informational reference (is this intentional?): RFC 7049 (Obsoleted by RFC 8949) Summary: 2 errors (**), 0 flaws (~~), 8 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group C. Bormann 3 Internet-Draft Universität Bremen TZI 4 Intended status: Informational 23 February 2022 5 Expires: 27 August 2022 7 Notable CBOR Tags 8 draft-bormann-cbor-notable-tags-06 10 Abstract 12 The Concise Binary Object Representation (CBOR, RFC 8949) is a data 13 format whose design goals include the possibility of extremely small 14 code size, fairly small message size, and extensibility without the 15 need for version negotiation. 17 In CBOR, one point of extensibility is the definition of CBOR tags. 18 RFC 8949's original edition, RFC 7049, defined a basic set of tags as 19 well as a registry that can be used to contribute additional tag 20 definitions [IANA.cbor-tags]. Since RFC 7049 was published, some 80 21 tag definitions have been added to that registry. 23 The present document provides a roadmap to a large subset of these 24 tag definitions. Where applicable, it points to a IETF standards or 25 standard development document that specifies the tag. Where no such 26 document exists, the intention is to collect specification 27 information from the sources of the registrations. After some more 28 development, the present document is intended to be useful as a 29 reference document for the IANA registrations of the CBOR tags the 30 definitions of which have been collected. 32 Note to Readers 34 This is an individual submission to the CBOR working group of the 35 IETF, https://datatracker.ietf.org/wg/cbor/about/ 36 (https://datatracker.ietf.org/wg/cbor/about/). Discussion currently 37 takes places on the github repository https://github.com/cabo/ 38 notable-tags (https://github.com/cabo/notable-tags). If the CBOR WG 39 believes this is a useful document, discussion is likely to move to 40 the CBOR WG mailing list and a github repository at the CBOR WG 41 github organization, https://github.com/cbor-wg (https://github.com/ 42 cbor-wg). 44 The current version is true work in progress; some of the sections 45 haven't been filled in yet, and in particular, permission has not 46 been obtained from tag definition authors to copy over their text. 48 Status of This Memo 50 This Internet-Draft is submitted in full conformance with the 51 provisions of BCP 78 and BCP 79. 53 Internet-Drafts are working documents of the Internet Engineering 54 Task Force (IETF). Note that other groups may also distribute 55 working documents as Internet-Drafts. The list of current Internet- 56 Drafts is at https://datatracker.ietf.org/drafts/current/. 58 Internet-Drafts are draft documents valid for a maximum of six months 59 and may be updated, replaced, or obsoleted by other documents at any 60 time. It is inappropriate to use Internet-Drafts as reference 61 material or to cite them other than as "work in progress." 63 This Internet-Draft will expire on 27 August 2022. 65 Copyright Notice 67 Copyright (c) 2022 IETF Trust and the persons identified as the 68 document authors. All rights reserved. 70 This document is subject to BCP 78 and the IETF Trust's Legal 71 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 72 license-info) in effect on the date of publication of this document. 73 Please review these documents carefully, as they describe your rights 74 and restrictions with respect to this document. Code Components 75 extracted from this document must include Revised BSD License text as 76 described in Section 4.e of the Trust Legal Provisions and are 77 provided without warranty as described in the Revised BSD License. 79 Table of Contents 81 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 82 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 83 2. RFC 7049 (original CBOR specification) . . . . . . . . . . . 4 84 2.1. Tags Related to Those Defined in RFC 7049 . . . . . . . . 5 85 2.2. Tags from RFC 7049 not listed in RFC 8949 . . . . . . . . 5 86 3. Security . . . . . . . . . . . . . . . . . . . . . . . . . . 6 87 3.1. RFC 8152 (COSE) . . . . . . . . . . . . . . . . . . . . . 6 88 3.2. RFC 8392 (CWT) . . . . . . . . . . . . . . . . . . . . . 7 89 4. CBOR-based Representation Formats . . . . . . . . . . . . . . 7 90 4.1. YANG-CBOR . . . . . . . . . . . . . . . . . . . . . . . . 7 91 5. Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . 8 92 5.1. DOTS . . . . . . . . . . . . . . . . . . . . . . . . . . 8 93 5.2. RAINS . . . . . . . . . . . . . . . . . . . . . . . . . . 8 94 6. Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . 8 95 6.1. Advanced arithmetic . . . . . . . . . . . . . . . . . . . 9 96 6.2. Variants of undefined . . . . . . . . . . . . . . . . . . 11 97 6.3. Typed and Homogeneous Arrays . . . . . . . . . . . . . . 11 98 7. Domain-Specific . . . . . . . . . . . . . . . . . . . . . . . 12 99 7.1. Extended Time Formats . . . . . . . . . . . . . . . . . . 13 100 8. Platform-oriented . . . . . . . . . . . . . . . . . . . . . . 14 101 8.1. Perl . . . . . . . . . . . . . . . . . . . . . . . . . . 15 102 8.2. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 15 103 8.3. Weird text encodings . . . . . . . . . . . . . . . . . . 16 104 9. Application-specific . . . . . . . . . . . . . . . . . . . . 16 105 9.1. Enumerated Alternative Data Items . . . . . . . . . . . . 17 106 9.1.1. Semantics . . . . . . . . . . . . . . . . . . . . . . 18 107 9.1.2. Rationale . . . . . . . . . . . . . . . . . . . . . . 19 108 9.1.3. Examples . . . . . . . . . . . . . . . . . . . . . . 20 109 10. Implementation aids . . . . . . . . . . . . . . . . . . . . . 21 110 10.1. Invalid Tag . . . . . . . . . . . . . . . . . . . . . . 21 111 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 112 12. Security Considerations . . . . . . . . . . . . . . . . . . . 22 113 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 114 13.1. Normative References . . . . . . . . . . . . . . . . . . 22 115 13.2. Informative References . . . . . . . . . . . . . . . . . 23 116 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 26 117 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 26 118 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 26 120 1. Introduction 122 (TO DO, expand on text from abstract here; move references here and 123 neuter them in the abstract as per Section 4.3 of [RFC7322].) 125 The selection of the tags presented here is somewhat arbitrary; 126 considerations such as how wide the scope and area of application of 127 a tag definition is combine with an assessment how "ready to use" the 128 tag definition is (i.e., is the tag specification in a state where it 129 can be used). 131 This document can only be a snapshot of a subset of the current 132 registrations. The most up to date set of registrations is always 133 available in the registry "CBOR Tags" [IANA.cbor-tags]. 135 1.1. Terminology 137 The definitions of [STD94] apply. Specifically: The term "byte" is 138 used in its now customary sense as a synonym for "octet"; "byte 139 strings" are CBOR data items carrying a sequence of zero or more 140 (binary) bytes, while "text strings" are CBOR data items carrying a 141 sequence of zero or more Unicode code points, encoded in UTF-8 142 [STD63]. Where bit arithmetic is explained, this document uses the 143 notation familiar from the programming language C ([C], including 144 C++14's 0bnnn binary literals [Cplusplus20]), except that superscript 145 notation (example for two to the power of 64: 2^64) denotes 146 exponentiation; in the plain text version of this document, 147 superscript notation is rendered in paragraph text by C-incompatible 148 surrogate notation as seen in this example. Ranges expressed using 149 .. are inclusive of the limits given. Type names such as "int", 150 "bigint" or "decfrac" are taken from Appendix D of [RFC8610], the 151 Concise Data Definition Language (CDDL). 153 2. RFC 7049 (original CBOR specification) 155 [RFC7049] defines a number of tags that are listed here for 156 convenience only. 158 +============+=============+=======================+============+ 159 | Tag number | Tag content | Short Description | Section of | 160 | | | | RFC 7049 | 161 +============+=============+=======================+============+ 162 | 0 | UTF-8 | Standard date/time | 2.4.1 | 163 | | string | string | | 164 +------------+-------------+-----------------------+------------+ 165 | 1 | multiple | Epoch-based date/time | 2.4.1 | 166 +------------+-------------+-----------------------+------------+ 167 | 2 | byte string | Positive bignum | 2.4.2 | 168 +------------+-------------+-----------------------+------------+ 169 | 3 | byte string | Negative bignum | 2.4.2 | 170 +------------+-------------+-----------------------+------------+ 171 | 4 | array | Decimal fraction | 2.4.3 | 172 +------------+-------------+-----------------------+------------+ 173 | 5 | array | Bigfloat | 2.4.3 | 174 +------------+-------------+-----------------------+------------+ 175 | 21 | multiple | Expected conversion | 2.4.4.2 | 176 | | | to base64url encoding | | 177 +------------+-------------+-----------------------+------------+ 178 | 22 | multiple | Expected conversion | 2.4.4.2 | 179 | | | to base64 encoding | | 180 +------------+-------------+-----------------------+------------+ 181 | 23 | multiple | Expected conversion | 2.4.4.2 | 182 | | | to base16 encoding | | 183 +------------+-------------+-----------------------+------------+ 184 | 24 | byte string | Encoded CBOR data | 2.4.4.1 | 185 | | | item | | 186 +------------+-------------+-----------------------+------------+ 187 | 32 | UTF-8 | URI | 2.4.4.3 | 188 | | string | | | 189 +------------+-------------+-----------------------+------------+ 190 | 33 | UTF-8 | base64url | 2.4.4.3 | 191 | | string | | | 192 +------------+-------------+-----------------------+------------+ 193 | 34 | UTF-8 | base64 | 2.4.4.3 | 194 | | string | | | 195 +------------+-------------+-----------------------+------------+ 196 | 35 | UTF-8 | Regular expression | 2.4.4.3 | 197 | | string | | | 198 +------------+-------------+-----------------------+------------+ 199 | 36 | UTF-8 | MIME message | 2.4.4.3 | 200 | | string | | | 201 +------------+-------------+-----------------------+------------+ 202 | 55799 | multiple | Self-describe CBOR | 2.4.5 | 203 +------------+-------------+-----------------------+------------+ 205 Table 1: Tag numbers defined in RFC 7049 207 2.1. Tags Related to Those Defined in RFC 7049 209 Separately registered tags that are directly related to the tags 210 predefined in RFC 7049 include: 212 * Tag 63, registered by this document, is a parallel to tag 24, with 213 the single difference that its byte string tag content carries a 214 CBOR Sequence [RFC8742] instead of a single CBOR data item. 216 * Tag 257, registered by Peter Occil with a specification in 217 http://peteroupc.github.io/CBOR/binarymime.html 218 (http://peteroupc.github.io/CBOR/binarymime.html), is a parallel 219 to tag 36, except that the tag content is a byte string, which 220 therefore can also carry binary MIME messages as per [RFC2045]. 222 2.2. Tags from RFC 7049 not listed in RFC 8949 224 Appendix G.3 of [STD94] states: 226 | Tag 35 is not defined by this document; the registration based on 227 | the definition in RFC 7049 remains in place. 229 The reason for this exclusion is that the definition of Tag 35 in 230 Section 2.4.4.3 of [RFC7049], leaves too much open to ensure 231 interoperability: 233 | Tag 35 is for regular expressions in Perl Compatible Regular 234 | Expressions (PCRE) / JavaScript syntax [ECMA262]. 236 Not only are two partially incompatible specifications given for the 237 semantics, JavaScript regular expressions have also developed 238 significantly within the decade since JavaScript 5.1 (which was 239 referenced as "ECMA262" by [RFC7049]), making it less reliable to 240 assume that a producing application will manage to stay within that 241 2011 subset. 243 Nonetheless, the registration is in place, so it is available for 244 applications that simply want to mark a text string as being a 245 regular expression roughly of the PCRE/Javascript flavor families. 247 3. Security 249 A number of CBOR tags are defined in security specifications that 250 make use of CBOR. 252 3.1. RFC 8152 (COSE) 254 [RFC8152] defines CBOR Object Signing and Encryption (COSE). A 255 revision is in process that splits this specification into the data 256 structure definitions [I-D.ietf-cose-rfc8152bis-struct], which will 257 define another tag for COSE standalone counter signature, and the 258 algorithms employed [I-D.ietf-cose-rfc8152bis-algs]. 260 +============+===============+=======================+ 261 | Tag number | Tag content | Short Description | 262 +============+===============+=======================+ 263 | 16 | COSE_Encrypt0 | COSE Single Recipient | 264 | | | Encrypted Data Object | 265 +------------+---------------+-----------------------+ 266 | 17 | COSE_Mac0 | COSE Mac w/o | 267 | | | Recipients Object | 268 +------------+---------------+-----------------------+ 269 | 18 | COSE_Sign1 | COSE Single Signer | 270 | | | Data Object | 271 +------------+---------------+-----------------------+ 272 | 96 | COSE_Encrypt | COSE Encrypted Data | 273 | | | Object | 274 +------------+---------------+-----------------------+ 275 | 97 | COSE_Mac | COSE MACed Data | 276 | | | Object | 277 +------------+---------------+-----------------------+ 278 | 98 | COSE_Sign | COSE Signed Data | 279 | | | Object | 280 +------------+---------------+-----------------------+ 282 Table 2: Tag numbers defined in RFC 8152, COSE 284 3.2. RFC 8392 (CWT) 286 [RFC8392] defines the CBOR Web Token (CWT), making use of COSE to 287 define a CBOR variant of the JOSE Web Token (JWT), [RFC7519], a 288 standardized security token that has found use in the area of web 289 applications, but is not technically limited to those. 291 +============+======================+======================+ 292 | Tag number | Tag content | Short Description | 293 +============+======================+======================+ 294 | 61 | CBOR Web Token (CWT) | CBOR Web Token (CWT) | 295 +------------+----------------------+----------------------+ 297 Table 3: Tag number defined for RFC 8392 CBOR Web Token 298 (CWT) 300 4. CBOR-based Representation Formats 302 Representation formats can be built on top of CBOR. 304 4.1. YANG-CBOR 306 YANG [RFC7950] is a data modeling language originally designed in the 307 context of the Network Configuration Protocol (NETCONF) [RFC6241], 308 now widely used for modeling management and configuration 309 information. [RFC7950] defines an XML-based representation format, 310 and [RFC7951] defines a JSON-based [RFC8259] representation format 311 for YANG. 313 YANG-CBOR [I-D.ietf-core-yang-cbor] is a representation format for 314 YANG data in CBOR. 316 +========+======================+=====================+============+ 317 | Tag | Tag content | Short Description | Section of | 318 | number | | | YANG-CBOR | 319 +========+======================+=====================+============+ 320 | 43 | byte string | YANG bits datatype | 6.7 | 321 +--------+----------------------+---------------------+------------+ 322 | 44 | unsigned integer | YANG enumeration | 6.6 | 323 | | | datatype | | 324 +--------+----------------------+---------------------+------------+ 325 | 45 | unsigned integer or | YANG identityref | 6.10 | 326 | | text string | datatype | | 327 +--------+----------------------+---------------------+------------+ 328 | 46 | unsigned integer or | YANG instance- | 6.13 | 329 | | text string or array | identifier datatype | | 330 +--------+----------------------+---------------------+------------+ 331 | 47 | unsigned integer | YANG Schema Item | 3.2 | 332 | | | iDentifier (sid) | | 333 +--------+----------------------+---------------------+------------+ 335 Table 4: Tag number defined for YANG-CBOR 337 5. Protocols 339 Protocols may want to allocate CBOR tag numbers to identify specific 340 protocol elements. 342 5.1. DOTS 344 DDoS Open Threat Signaling (DOTS) defines tag number 271 for the DOTS 345 signal channel object in [RFC9132]. 347 5.2. RAINS 349 As an example for how experimental protocols can make use of CBOR tag 350 definitions, the RAINS (Another Internet Naming Service) Protocol 351 Specification defines tag number 15309736 for a RAINS Message 352 [I-D.trammell-rains-protocol]. (The seemingly random tag number was 353 chosen so that, when represented as an encoded CBOR tag argument, it 354 contains the Unicode character "雨" (U+96E8) in UTF-8, which 355 represents rain in a number of languages.) 357 6. Datatypes 358 6.1. Advanced arithmetic 360 A number of tags have been registered for arithmetic representations 361 beyond those built into CBOR and defined by tags in [RFC7049]. These 362 are all documented under http://peteroupc.github.io/CBOR/; the last 363 pathname component for the URL is given in Table 5. 365 +============+=============+=======================+===============+ 366 | Tag number | Tag content | Short Description | Reference | 367 +============+=============+=======================+===============+ 368 | 30 | array | Rational number | rational.html | 369 +------------+-------------+-----------------------+---------------+ 370 | 264 | array | Decimal fraction with | bigfrac.html | 371 | | | arbitrary exponent | | 372 +------------+-------------+-----------------------+---------------+ 373 | 265 | array | Bigfloat with | bigfrac.html | 374 | | | arbitrary exponent | | 375 +------------+-------------+-----------------------+---------------+ 376 | 268 | array | Extended decimal | extended.html | 377 | | | fraction | | 378 +------------+-------------+-----------------------+---------------+ 379 | 269 | array | Extended bigfloat | extended.html | 380 +------------+-------------+-----------------------+---------------+ 381 | 270 | array | Extended rational | extended.html | 382 | | | number | | 383 +------------+-------------+-----------------------+---------------+ 385 Table 5: Tags for advanced arithmetic 387 CBOR's basic generic data model (Section 2 of [STD94]) has a number 388 system with limited-range integers (major types 0 and 1: 389 -2^64..2^64-1) and floating point numbers that cover binary16, 390 binary32, and binary64 (including non-finites) from [IEEE754]. With 391 the tags defined with [RFC7049], the extended generic data model 392 (Section 2.1 of [STD94]) adds unlimited-range integers (tag numbers 2 393 and 3, "bigint" in CDDL) as well as floating point values using the 394 bases 2 (tag number 5, "bigfloat") and 10 (tag number 4, "decfrac"). 396 This pre-defined number system has a number of limitations that are 397 addressed in three of the tags discussed here: 399 * Tag number 30 allows the representation of rational numbers as a 400 ratio of two integers: a numerator (usually written as the top 401 part of a fraction), and a denominator (the bottom part), where 402 both integers can be limited-range basic and unlimited-range 403 integers. The mathematical value of a rational number is the 404 numerator divided by the denominator. This tag can express all 405 numbers that the extended generic data model of [RFC7049] can 406 express, except for non-finites [IEEE754]; it also can express 407 rational numbers that cannot be expressed with denominators that 408 are a power of 2 or a power of 10. 410 For example, the rational number 1/3 is encoded: 412 d8 1e ---- Tag 30 413 82 ---- Array length 2 414 01 ---- 1 415 03 ---- 3 417 Many programming languages have built-in support for rational 418 numbers or support for them is included in their standard 419 libraries; tag number 30 is a way for these platforms to 420 interchange these rational numbers in CBOR. 422 * Tag numbers 4 and 5 are limited in the range of the (base 10 or 423 base 2) exponents by the limited-range integers in the basic 424 generic data model. Tag numbers 264 and 265 are exactly 425 equivalent to 4 and 5, respectively, but also allow unlimited- 426 range integers as exponents. While applications for floating 427 point numbers with exponents outside the CBOR basic integer range 428 are limited, tags 264 and 265 allow unlimited roundtripping with 429 other formats that allow very large or very small exponents, such 430 as those JSON [RFC8259] can provide if the limitations of I-JSON 431 [RFC7493] do not apply. 433 The tag numbers 268..270 extend these tags further by providing a way 434 to express non-finites within a tag with this number. This does not 435 increase the expressiveness of the data model (the non-finites can 436 already be expressed using major type 7 floating point numbers), but 437 does allow both finite and non-finite values to carry the same tag. 438 In most applications, a choice that includes some of the three tags 439 30, 264, 265 for finite values and major type 7 floating point values 440 for non-finites (as well as possibly other parts of the CBOR number 441 system) will be the preferred solution. 443 This document suggests using the CDDL typenames defined in Figure 1 444 for the three most useful tag numbers in this section. 446 rational = #6.30([numerator: integer, denominator: integer .ne 0]) 447 rational_of = #6.30([numerator: N, denominator: D]) 448 ; the value 1/3 can be notated as rational_of<1, 3> 450 extended_decfrac = #6.264([e10: integer, m: integer]) 451 extended_bigfloat = #6.265([e2: integer, m: integer]) 453 Figure 1: CDDL for extended arithmetic tags 455 6.2. Variants of undefined 457 https://github.com/svaarala/cbor-specs/blob/master/cbor-absent- 458 tag.rst defines tag 31 to be applied to the CBOR value Undefined 459 (0xf7), slightly modifying its semantics to stand for an absent value 460 in a CBOR Array. 462 (TO DO: Obtain permission to copy the definitions here.) 464 6.3. Typed and Homogeneous Arrays 466 [RFC8746] defines tags for various kinds of arrays. A summary is 467 reproduced in Table 6. 469 +======+=============+=============================================+ 470 | Tag | Data Item | Semantics | 471 +======+=============+=============================================+ 472 | 64 | byte string | uint8 Typed Array | 473 +------+-------------+---------------------------------------------+ 474 | 65 | byte string | uint16, big endian, Typed Array | 475 +------+-------------+---------------------------------------------+ 476 | 66 | byte string | uint32, big endian, Typed Array | 477 +------+-------------+---------------------------------------------+ 478 | 67 | byte string | uint64, big endian, Typed Array | 479 +------+-------------+---------------------------------------------+ 480 | 68 | byte string | uint8 Typed Array, clamped arithmetic | 481 +------+-------------+---------------------------------------------+ 482 | 69 | byte string | uint16, little endian, Typed Array | 483 +------+-------------+---------------------------------------------+ 484 | 70 | byte string | uint32, little endian, Typed Array | 485 +------+-------------+---------------------------------------------+ 486 | 71 | byte string | uint64, little endian, Typed Array | 487 +------+-------------+---------------------------------------------+ 488 | 72 | byte string | sint8 Typed Array | 489 +------+-------------+---------------------------------------------+ 490 | 73 | byte string | sint16, big endian, Typed Array | 491 +------+-------------+---------------------------------------------+ 492 | 74 | byte string | sint32, big endian, Typed Array | 493 +------+-------------+---------------------------------------------+ 494 | 75 | byte string | sint64, big endian, Typed Array | 495 +------+-------------+---------------------------------------------+ 496 | 76 | byte string | (reserved) | 497 +------+-------------+---------------------------------------------+ 498 | 77 | byte string | sint16, little endian, Typed Array | 499 +------+-------------+---------------------------------------------+ 500 | 78 | byte string | sint32, little endian, Typed Array | 501 +------+-------------+---------------------------------------------+ 502 | 79 | byte string | sint64, little endian, Typed Array | 503 +------+-------------+---------------------------------------------+ 504 | 80 | byte string | IEEE 754 binary16, big endian, Typed Array | 505 +------+-------------+---------------------------------------------+ 506 | 81 | byte string | IEEE 754 binary32, big endian, Typed Array | 507 +------+-------------+---------------------------------------------+ 508 | 82 | byte string | IEEE 754 binary64, big endian, Typed Array | 509 +------+-------------+---------------------------------------------+ 510 | 83 | byte string | IEEE 754 binary128, big endian, Typed Array | 511 +------+-------------+---------------------------------------------+ 512 | 84 | byte string | IEEE 754 binary16, little endian, Typed | 513 | | | Array | 514 +------+-------------+---------------------------------------------+ 515 | 85 | byte string | IEEE 754 binary32, little endian, Typed | 516 | | | Array | 517 +------+-------------+---------------------------------------------+ 518 | 86 | byte string | IEEE 754 binary64, little endian, Typed | 519 | | | Array | 520 +------+-------------+---------------------------------------------+ 521 | 87 | byte string | IEEE 754 binary128, little endian, Typed | 522 | | | Array | 523 +------+-------------+---------------------------------------------+ 524 | 40 | array of | Multi-dimensional Array, row-major order | 525 | | two arrays* | | 526 +------+-------------+---------------------------------------------+ 527 | 1040 | array of | Multi-dimensional Array, column-major order | 528 | | two arrays* | | 529 +------+-------------+---------------------------------------------+ 530 | 41 | array | Homogeneous Array | 531 +------+-------------+---------------------------------------------+ 533 Table 6: Tag numbers defined for Arrays 535 7. Domain-Specific 537 (TO DO: Obtain permission to copy the definitions here; explain how 538 tags 52 and 54 essentially obsolete 260/261.) 539 +======+=======+=================+=================================+========+ 540 |Tag |Tag |Short Description|Reference |Author | 541 |number|content| | | | 542 +======+=======+=================+=================================+========+ 543 |37 |byte |Binary UUID |https://github.com/lucas- |Lucas | 544 | |string |(Section 4.1.2 of|clemente/cbor-specs/blob/master/ |Clemente| 545 | | |[RFC4122]) |uuid.md | | 546 +------+-------+-----------------+---------------------------------+--------+ 547 |38 |array |Language-tagged |http://peteroupc.github.io/CBOR/ |Peter | 548 | | |string |langtags.html |Occil | 549 +------+-------+-----------------+---------------------------------+--------+ 550 |257 |byte |Binary MIME |http://peteroupc.github.io/CBOR/ |Peter | 551 | |string |message |binarymime.html |Occil | 552 +------+-------+-----------------+---------------------------------+--------+ 553 |260 |byte |Network Address |http://www.employees.org/~ravir/ |Ravi | 554 | |string |(IPv4 or IPv6 or |cbor-network.txt |Raju | 555 | | |MAC Address) | | | 556 +------+-------+-----------------+---------------------------------+--------+ 557 |261 |map |Network Address |https://github.com/toravir/CBOR- |Ravi | 558 | | |Prefix (IPv4 or |Tag-Specs/blob/master/ |Raju | 559 | | |IPv6 Address + |networkPrefix.md | | 560 | | |Mask Length) | | | 561 +------+-------+-----------------+---------------------------------+--------+ 562 |263 |byte |Hexadecimal |https://github.com/toravir/CBOR- |Ravi | 563 | |string |string |Tag-Specs/blob/master/ |Raju | 564 | | | |hexString.md | | 565 +------+-------+-----------------+---------------------------------+--------+ 566 |266 |text |Internationalized|https://peteroupc.github.io/CBOR/|Peter | 567 | |string |resource |iri.html |Occil | 568 | | |identifier (IRI) | | | 569 +------+-------+-----------------+---------------------------------+--------+ 570 |267 |text |Internationalized|https://peteroupc.github.io/CBOR/|Peter | 571 | |string |resource |iri.html |Occil | 572 | | |identifier | | | 573 | | |reference (IRI | | | 574 | | |reference) | | | 575 +------+-------+-----------------+---------------------------------+--------+ 577 Table 7 579 7.1. Extended Time Formats 581 Additional tag definitions have been provided for date and time 582 values. 584 +======+===========+===================+==========================+ 585 | Tag | Data Item | Semantics | Reference | 586 +======+===========+===================+==========================+ 587 | 100 | integer | date in number of | [RFC8943] | 588 | | | days since epoch | | 589 +------+-----------+-------------------+--------------------------+ 590 | 1004 | text | RFC 3339 full- | [RFC8943] | 591 | | string | date string | | 592 +------+-----------+-------------------+--------------------------+ 593 | 1001 | map | extended time | [I-D.ietf-cbor-time-tag] | 594 +------+-----------+-------------------+--------------------------+ 595 | 1002 | map | duration | [I-D.ietf-cbor-time-tag] | 596 +------+-----------+-------------------+--------------------------+ 597 | 1003 | map | period | [I-D.ietf-cbor-time-tag] | 598 +------+-----------+-------------------+--------------------------+ 600 Table 8: Tag numbers for date and time 602 Note that tags 100 and 1004 are for calendar dates that are not 603 anchored to a specific time zone; they are meant to specify calendar 604 dates as perceived by humans, e.g. for use in personal identification 605 documents. Converting such a calendar date into a specific point in 606 time needs the addition of a time-of-day (for which a CBOR tag is 607 outstanding) and timezone information (also outstanding). 608 Alternatively, a calendar date plus timezone information can be 609 converted into a time period (range of time values given by the 610 starting and the ending time); note that these time periods are not 611 always exactly 24 h (86400 s) long. 613 [RFC8943] does not suggest CDDL [RFC8610] type names for the two 614 tags. We suggest copying the definitions in Figure 2 into 615 application-specific CDDL as needed. 617 caldate = #6.100(int) ; calendar date as a number of days from 1970-01-01 618 tcaldate = #6.1004(tstr) ; calendar date as an RFC 3339 full-date string 620 Figure 2: CDDL for calendar date tags (RFC8943) 622 Tag 1001 extends tag 1 by additional information (such as picosecond 623 resolution) and allows the use of Decimal and Bigfloat numbers for 624 the time. 626 8. Platform-oriented 627 8.1. Perl 629 (These are actually not as Perl-specific as the title of this section 630 suggests. See also the penultimate paragraph of Section 3.4 of 631 [STD94].) 633 These are all documented under http://cbor.schmorp.de/; the last 634 pathname component is given in Table 9. 636 (TO DO: Obtain permission to copy the definitions here.) 638 +=======+==========+========================+================+ 639 | Tag | Data | Semantics | Reference | 640 | | Item | | | 641 +=======+==========+========================+================+ 642 | 256 | multiple | mark value as having | stringref | 643 | | | string references | | 644 +-------+----------+------------------------+----------------+ 645 | 25 | unsigned | reference the nth | stringref | 646 | | integer | previously seen string | | 647 +-------+----------+------------------------+----------------+ 648 | 26 | array | Serialized Perl object | perl-object | 649 | | | with classname and | | 650 | | | constructor arguments | | 651 +-------+----------+------------------------+----------------+ 652 | 27 | array | Serialized language- | generic-object | 653 | | | independent object | | 654 | | | with type name and | | 655 | | | constructor arguments | | 656 +-------+----------+------------------------+----------------+ 657 | 28 | multiple | mark value as | value-sharing | 658 | | | (potentially) shared | | 659 +-------+----------+------------------------+----------------+ 660 | 29 | unsigned | reference nth marked | value-sharing | 661 | | integer | value | | 662 +-------+----------+------------------------+----------------+ 663 | 22098 | multiple | hint that indicates an | indirection | 664 | | | additional level of | | 665 | | | indirection | | 666 +-------+----------+------------------------+----------------+ 668 Table 9: Tag numbers that aid the Perl platform 670 8.2. JSON 672 (TO DO: Obtain permission to copy the definitions here.) 673 Tag number 262 has been registered to identify byte strings that 674 carry embedded JSON text (https://github.com/toravir/CBOR-Tag- 675 Specs/blob/master/embeddedJSON.md). 677 Tag number 275 can be used to identify maps that contain keys that 678 are all of type Text String, as they would occur in JSON 679 (https://github.com/ecorm/cbor-tag-text-key-map). 681 8.3. Weird text encodings 683 (TO DO: Obtain permission to copy the definitions here.) 685 Some variants of UTF-8 are in use in specific areas of application. 686 Tags have been registered to be able to carry around strings in these 687 variants in case they are not also valid UTF-8 and can therefore not 688 be represented as a CBOR text string (https://github.com/svaarala/ 689 cbor-specs/blob/master/cbor-nonutf8-string-tags.rst). 691 +============+=============+=========================+ 692 | Tag Number | Data Item | Semantics | 693 +============+=============+=========================+ 694 | 272 | byte string | Non-UTF-8 CESU-8 string | 695 +------------+-------------+-------------------------+ 696 | 273 | byte string | Non-UTF-8 WTF-8 string | 697 +------------+-------------+-------------------------+ 698 | 274 | byte string | Non-UTF-8 MUTF-8 string | 699 +------------+-------------+-------------------------+ 701 Table 10: Tag numbers for UTF-8 variants 703 9. Application-specific 705 (TO DO: Obtain permission to copy the definitions here.) 706 +======+========+====================+===================================================+========+ 707 |Tag |Tag |Short Description |Reference |Author | 708 |number|content | | | | 709 +======+========+====================+===================================================+========+ 710 |39 |multiple|Identifier |[https://github.com/lucas-clemente/cbor- |Lucas | 711 | | | |specs/blob/master/id.md |Clemente| 712 +------+--------+--------------------+---------------------------------------------------+--------+ 713 |42 |byte |IPLD content |[https://github.com/ipld/cid-cbor/ |Volker | 714 | |string |identifier | |Mische | 715 +------+--------+--------------------+---------------------------------------------------+--------+ 716 |103 |array |Geographic |[https://github.com/allthingstalk/cbor/blob/master/|Danilo | 717 | | |Coordinates |CBOR-Tag103-Geographic-Coordinates.md |Vidovic | 718 +------+--------+--------------------+---------------------------------------------------+--------+ 719 |104 |multiple|Geographic |[I-D.clarke-cbor-crs] | | 720 | | |Coordinate Reference| | | 721 | | |System WKT or EPSG | | | 722 | | |number | | | 723 +------+--------+--------------------+---------------------------------------------------+--------+ 724 |120 |multiple|Internet of Things |[https://github.com/allthingstalk/cbor/blob/master/|Danilo | 725 | | |Data Point |CBOR-Tag120-Internet-of-Things-Data-Points.md |Vidovic | 726 +------+--------+--------------------+---------------------------------------------------+--------+ 727 |258 |array |Mathematical finite |[https://github.com/input-output-hk/cbor-sets- |Alfredo | 728 | | |set |spec/blob/master/CBOR_SETS.md |Di | 729 | | | | |Napoli | 730 +------+--------+--------------------+---------------------------------------------------+--------+ 731 |259 |map |Map datatype with |[https://github.com/shanewholloway/js-cbor- |Shane | 732 | | |key-value operations|codec/blob/master/docs/CBOR-259-spec--explicit- |Holloway| 733 | | |(e.g. .get |maps.md | | 734 | | |()/.set()/.delete())| | | 735 +------+--------+--------------------+---------------------------------------------------+--------+ 737 Table 11 739 9.1. Enumerated Alternative Data Items 741 (Original Text for this section was contributed by Duncan Coutts and 742 Michael Peyton Jones; all errors are the author's.) 744 A set of CBOR tag numbers has been allocated (to do, Section 11) for 745 encoding data composed of enumerated alternatives: 747 +============+=============+===================================+ 748 | Tags | Data Item | Meaning | 749 +============+=============+===================================+ 750 | 121..127 | any | alternatives 0..6, 1+1 encoding | 751 +------------+-------------+-----------------------------------+ 752 | 1280..1400 | any | alternatives 7..127, 1+2 encoding | 753 +------------+-------------+-----------------------------------+ 754 | 101 | array | alternatives as given by the uint | 755 | | [uint, any] | + 128 | 756 +------------+-------------+-----------------------------------+ 758 Table 12: Tags for Enumerated Alternative Data Items 760 The tags defined in this section are for encoding data that can be in 761 one of a number of different enumerated forms. 763 For example data representing the result of some action might be 764 either a failure with some failure detail, or a success with some 765 result. In this example there are two cases, the failure case and 766 the success case, and we can enumerate them as 0 and 1. 768 In general the number of alternatives, and what data is expected in 769 each alternative case is entirely application dependent. 771 The tags defined in this specification allow the encoding of any 772 number of alternatives, but provide compact encoding for the common 773 cases of low numbers of alternatives: 775 * Alternatives 0..6 can be encoded in 2 bytes; 777 * Alternatives 7..127 can be encoded in 3 bytes; 779 * Alternatives 128+ can be encoded in 3-12 bytes. 781 There are no special considerations for deterministic encoding 782 Section 4.2 of [STD94]: The case numbers covered by each tag do not 783 overlap; particularly, tag 101 encoding starts where the more compact 784 special encodings for 0..6 and 7..127 end. 786 9.1.1. Semantics 788 The value consists of a case number and a case body. The case number 789 is an unsigned integer that indicates which case out of the set of 790 alternatives is used. The case body is any CBOR data value. 792 In a setting where the application uses a schema (formally or 793 informally), then there will be an appropriate sub-schema for each 794 case in the set of alternatives. The representation of the case body 795 should comply with the schema corresponding to the case number used. 797 To continue the example above about representing failure or success, 798 suppose that the failure detail consists of an integer code and a 799 string, and suppose that the successful result is a byte string. A 800 failure value will use case 0 and the case body will be a CBOR list 801 containing an integer and a text string. Alternatively, a success 802 value will use case 1 and the body will be a single CBOR byte string. 804 Decoders that enforce a schema must check the case number is within 805 the range of cases allowed, and that the case body follows the schema 806 for the supplied case number. Generic decoders should allow any case 807 number and any CBOR data value for the case body. 809 9.1.2. Rationale 811 CBOR has direct support for _combinations_ of multiple values but not 812 for _alternatives_ of multiple values. Combinations are expressed in 813 CBOR using lists or maps. 815 Most programming languages have a notion of data consisting of 816 combinations of data values, often called records or objects. Many 817 programming languages also have a notion of data consisting of 818 multiple alternative data values. For example C has unions, and 819 other languages have "tagged" unions (where it is always clear which 820 alternative is in use). 822 Crucially for this set of tags, the set of alternatives must be 823 closed and ordered. This allows encoding using an unsigned number to 824 distinguish each case. 826 Note that this does _not_ correspond to the notion in some 827 programming languages of classes and subclasses since in that context 828 the set of alternatives is open and unordered. Alternatives of this 829 kind are well-supported by tag 27 "Serialized language-independent 830 object with type name and constructor arguments". 832 In functional programming languages, the primary way of forming new 833 data types is to enumerate a set of alternatives (each of which may 834 be a record). Such forms of data are also supported in hybrid 835 functional languages or languages with functional features. 837 Thus, in some applications, it is very common to have data making use 838 of alternatives, and it is worth finding a compact encoding, at least 839 for the common cases. Just as most records are small, most 840 alternatives are also small. 842 In this specification we reserve 7 values in the 2-byte part of the 843 available tag encoding space for alternatives 0..6 which are by far 844 the most common. We reserve a range of 121 values in the 3-bytes tag 845 encoding space. To cover the general case we use an encoding using a 846 pair consisting of an unsigned integer and the case body, the first 847 24 of which also result in a 3-byte encoding. 849 9.1.3. Examples 851 To elaborate on the example from the introduction, we have a "result" 852 that is a failure or success, where: 854 * the failure detail consists of an integer code and a string; 856 * the successful result is a byte string. 858 This corresponds to the following schema, in CDDL notation: 860 result = #6.121([int, text]) 861 / #6.122(bytes) 863 Example values: 865 121([3, "the printer is on fire"]) 867 122(h'ff00') 869 As a second example, here is one based on a data type defined within 870 the Haskell programming language, representing a simple expression 871 tree. 873 -- A data type representing simple arithmetic expressions 875 data Expr = Lit Int -- integer literal 876 | Add Expr Expr -- addition 877 | Sub Expr Expr -- subtraction 878 | Neg Expr -- unary negation 879 | Mul Expr Expr -- multiplication 880 | Div Expr Expr -- integer division 882 In CDDL notation, and using the tags in this specification, such data 883 could be encoded using this schema: 885 ; A data type representing simple arithmetic expressions 887 expr = 121(int) ; integer literal 888 / 122([expr, expr]) ; addition 889 / 123([expr, expr]) ; subtraction 890 / 124(expr) ; unary negation 891 / 125([expr, expr]) ; multiplication 892 / 126([expr, expr]) ; integer division 894 10. Implementation aids 896 10.1. Invalid Tag 898 The present document registers tag numbers 65535, 4294967295, and 899 18446744073709551615 (16-bit 0xffff, 32-bit 0xffffffff, and 64-bit 900 0xffffffffffffffff) as Invalid Tags, tags that are always invalid, 901 independent of the tag content provided. The purpose of these tag 902 number registrations is to enable the tag numbers to be reserved for 903 internal use by implementations to note the absence of a tag on a 904 data item where a tag could also be expected with that data item as 905 tag content. 907 The Invalid Tags are not intended to ever occur in interchanged CBOR 908 data items. Generic CBOR decoder implementations are encouraged to 909 raise an error if an Invalid Tag occurs in a CBOR data item even if 910 there is no validity checking implemented otherwise. 912 11. IANA Considerations 914 In the registry "CBOR Tags" [IANA.cbor-tags], IANA has allocated the 915 first to third tag in Table 13 from the FCFS space, with the present 916 document as the specification reference. IANA has allocated the 917 fourth tag from the Specification Required space, with the present 918 document as the specification reference. 920 +======================+========+==============+====================+ 921 | Tag | Data | Semantics | Reference | 922 | | Item | | | 923 +======================+========+==============+====================+ 924 | 65535 | (none | always | draft-bormann- | 925 | | valid) | invalid | cbor-notable-tags, | 926 | | | | Section 10.1 | 927 +----------------------+--------+--------------+--------------------+ 928 | 4294967295 | (none | always | draft-bormann- | 929 | | valid) | invalid | cbor-notable-tags, | 930 | | | | Section 10.1 | 931 +----------------------+--------+--------------+--------------------+ 932 | 18446744073709551615 | (none | always | draft-bormann- | 933 | | valid) | invalid | cbor-notable-tags, | 934 | | | | Section 10.1 | 935 +----------------------+--------+--------------+--------------------+ 936 | 63 | byte | Encoded | draft-bormann- | 937 | | string | CBOR | cbor-notable-tags, | 938 | | | Sequence | Section 2.1 | 939 | | | [RFC8742] | | 940 +----------------------+--------+--------------+--------------------+ 942 Table 13: Values for Tags 944 In addition, IANA is requested to allocate the tags from Table 12, 945 with a reference to the present document. 947 12. Security Considerations 949 The security considerations of [STD94] apply; the tags discussed here 950 may also have specific security considerations that are mentioned in 951 their specific sections above. 953 13. References 955 13.1. Normative References 957 [I-D.ietf-core-yang-cbor] 958 Veillette, M., Petrov, I., Pelov, A., Bormann, C., and M. 959 Richardson, "CBOR Encoding of Data Modeled with YANG", 960 Work in Progress, Internet-Draft, draft-ietf-core-yang- 961 cbor-18, 19 December 2021, 962 . 965 [IANA.cbor-tags] 966 IANA, "Concise Binary Object Representation (CBOR) Tags", 967 . 969 [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", 970 RFC 8152, DOI 10.17487/RFC8152, July 2017, 971 . 973 [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, 974 "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, 975 May 2018, . 977 [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data 978 Definition Language (CDDL): A Notational Convention to 979 Express Concise Binary Object Representation (CBOR) and 980 JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, 981 June 2019, . 983 [RFC8746] Bormann, C., Ed., "Concise Binary Object Representation 984 (CBOR) Tags for Typed Arrays", RFC 8746, 985 DOI 10.17487/RFC8746, February 2020, 986 . 988 [RFC9132] Boucadair, M., Ed., Shallow, J., and T. Reddy.K, 989 "Distributed Denial-of-Service Open Threat Signaling 990 (DOTS) Signal Channel Specification", RFC 9132, 991 DOI 10.17487/RFC9132, September 2021, 992 . 994 [STD94] Bormann, C. and P. Hoffman, "Concise Binary Object 995 Representation (CBOR)", STD 94, RFC 8949, 996 DOI 10.17487/RFC8949, December 2020, 997 . 999 13.2. Informative References 1001 [C] International Organization for Standardization, 1002 "Information technology - Programming languages - C", ISO/ 1003 IEC 9899:2018, June 2018, 1004 . 1006 [Cplusplus20] 1007 International Organization for Standardization, 1008 "Programming languages - C++", ISO/IEC ISO/IEC JTC1 SC22 1009 WG21 N 4860, March 2020, 1010 . 1012 [I-D.clarke-cbor-crs] 1013 Clarke, T. R., "Concise Binary Object Representation 1014 (CBOR) Tag for Coordinate Reference System (CRS) 1015 Specification", Work in Progress, Internet-Draft, draft- 1016 clarke-cbor-crs-02, 17 March 2020, 1017 . 1020 [I-D.ietf-cbor-time-tag] 1021 Bormann, C., Gamari, B., and H. Birkholz, "Concise Binary 1022 Object Representation (CBOR) Tags for Time, Duration, and 1023 Period", Work in Progress, Internet-Draft, draft-ietf- 1024 cbor-time-tag-00, 19 May 2021, 1025 . 1028 [I-D.ietf-cose-rfc8152bis-algs] 1029 Schaad, J., "CBOR Object Signing and Encryption (COSE): 1030 Initial Algorithms", Work in Progress, Internet-Draft, 1031 draft-ietf-cose-rfc8152bis-algs-12, 24 September 2020, 1032 . 1035 [I-D.ietf-cose-rfc8152bis-struct] 1036 Schaad, J., "CBOR Object Signing and Encryption (COSE): 1037 Structures and Process", Work in Progress, Internet-Draft, 1038 draft-ietf-cose-rfc8152bis-struct-15, 1 February 2021, 1039 . 1042 [I-D.trammell-rains-protocol] 1043 Trammell, B. and C. Fehlmann, "RAINS (Another Internet 1044 Naming Service) Protocol Specification", Work in Progress, 1045 Internet-Draft, draft-trammell-rains-protocol-05, 29 1046 January 2019, . 1049 [IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", IEEE 1050 Std 754-2019, DOI 10.1109/IEEESTD.2019.8766229, 1051 . 1053 [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail 1054 Extensions (MIME) Part One: Format of Internet Message 1055 Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996, 1056 . 1058 [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally 1059 Unique IDentifier (UUID) URN Namespace", RFC 4122, 1060 DOI 10.17487/RFC4122, July 2005, 1061 . 1063 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1064 and A. Bierman, Ed., "Network Configuration Protocol 1065 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1066 . 1068 [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object 1069 Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, 1070 October 2013, . 1072 [RFC7322] Flanagan, H. and S. Ginoza, "RFC Style Guide", RFC 7322, 1073 DOI 10.17487/RFC7322, September 2014, 1074 . 1076 [RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493, 1077 DOI 10.17487/RFC7493, March 2015, 1078 . 1080 [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token 1081 (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, 1082 . 1084 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1085 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1086 . 1088 [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", 1089 RFC 7951, DOI 10.17487/RFC7951, August 2016, 1090 . 1092 [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data 1093 Interchange Format", STD 90, RFC 8259, 1094 DOI 10.17487/RFC8259, December 2017, 1095 . 1097 [RFC8742] Bormann, C., "Concise Binary Object Representation (CBOR) 1098 Sequences", RFC 8742, DOI 10.17487/RFC8742, February 2020, 1099 . 1101 [RFC8943] Jones, M., Nadalin, A., and J. Richter, "Concise Binary 1102 Object Representation (CBOR) Tags for Date", RFC 8943, 1103 DOI 10.17487/RFC8943, November 2020, 1104 . 1106 [STD63] Yergeau, F., "UTF-8, a transformation format of ISO 1107 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November 1108 2003, . 1110 Acknowledgements 1112 (Many, TBD) 1114 Contributors 1116 Peter Occil 1117 Email: poccil14 at gmail dot com 1119 Peter Occil registered tags 30, 264, 265, 268-270 (Section 6.1), 38, 1120 257, 266 and 267 (Section 7), and contributed much of the text about 1121 these tags in this document. 1123 Duncan Coutts 1124 Email: duncan@well-typed.com 1126 Michael Peyton Jones 1127 Email: me@michaelpj.com 1129 Jane Doe 1130 To do 1132 Further contributors will be listed here as text is added. 1134 Plase stay tuned. 1136 Author's Address 1138 Carsten Bormann 1139 Universität Bremen TZI 1140 Postfach 330440 1141 D-28359 Bremen 1142 Germany 1143 Phone: +49-421-218-63921 1144 Email: cabo@tzi.org