rfc9682.original | rfc9682.txt | |||
---|---|---|---|---|
CBOR C. Bormann | Internet Engineering Task Force (IETF) C. Bormann | |||
Internet-Draft Universität Bremen TZI | Request for Comments: 9682 Universität Bremen TZI | |||
Updates: 8610 (if approved) 24 June 2024 | Updates: 8610 November 2024 | |||
Intended status: Standards Track | Category: Standards Track | |||
Expires: 26 December 2024 | ISSN: 2070-1721 | |||
Updates to the CDDL grammar of RFC 8610 | Updates to the Concise Data Definition Language (CDDL) Grammar | |||
draft-ietf-cbor-update-8610-grammar-06 | ||||
Abstract | Abstract | |||
The Concise Data Definition Language (CDDL), as defined in RFC 8610 | The Concise Data Definition Language (CDDL), as defined in RFCs 8610 | |||
and RFC 9165, provides an easy and unambiguous way to express | and 9165, provides an easy and unambiguous way to express structures | |||
structures for protocol messages and data formats that are | for protocol messages and data formats that are represented in | |||
represented in CBOR or JSON. | Concise Binary Object Representation (CBOR) or JSON. | |||
The present document updates RFC 8610 by addressing errata and making | ||||
other small fixes for the ABNF grammar defined for CDDL there. | ||||
About This Document | ||||
This note is to be removed before publishing as an RFC. | ||||
The latest revision of this draft can be found at https://cbor- | ||||
wg.github.io/update-8610-grammar/. Status information for this | ||||
document may be found at https://datatracker.ietf.org/doc/draft-ietf- | ||||
cbor-update-8610-grammar/. | ||||
Discussion of this document takes place on the CBOR Working Group | ||||
mailing list (mailto:cbor@ietf.org), which is archived at | ||||
https://mailarchive.ietf.org/arch/browse/cbor/. Subscribe at | ||||
https://www.ietf.org/mailman/listinfo/cbor/. | ||||
Source for this draft and an issue tracker can be found at | This document updates RFC 8610 by addressing related errata reports | |||
https://github.com/cbor-wg/update-8610-grammar. | and making other small fixes for the ABNF grammar defined for CDDL. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
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 | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 26 December 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9682. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Conventions and Definitions . . . . . . . . . . . . . . . 3 | 1.1. Conventions and Definitions | |||
2. Clarifications and Changes based on Errata Reports . . . . . 3 | 2. Clarifications and Changes Based on Errata Reports | |||
2.1. Updates to String Literal Grammar . . . . . . . . . . . . 3 | 2.1. Updates to String Literal Grammar | |||
Err6527 (Text String Literals) . . . . . . . . . . . . . . . 3 | 2.1.1. Erratum ID 6527 (Text String Literals) | |||
Err6278 (Consistent String Literals) . . . . . . . . . . . . 5 | 2.1.2. Erratum ID 6278 (Consistent String Literals) | |||
Addressing Err6526, Err6543 . . . . . . . . . . . . . . . . . 5 | 2.1.3. Addressing Erratum ID 6526 and Erratum ID 6543 | |||
2.2. Examples Demonstrating the Updated String Syntaxes . . . 5 | 2.2. Examples Demonstrating the Updated String Syntaxes | |||
3. Small Enabling Grammar Changes . . . . . . . . . . . . . . . 6 | 3. Small Enabling Grammar Changes | |||
3.1. Empty data models . . . . . . . . . . . . . . . . . . . . 7 | 3.1. Empty Data Models | |||
3.2. Non-literal Tag Numbers, Simple Values . . . . . . . . . 7 | 3.2. Non-Literal Tag Numbers and Simple Values | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 4. Security Considerations | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 5. IANA Considerations | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. References | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 9 | 6.1. Normative References | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 9 | 6.2. Informative References | |||
Appendix A. Updated Collected ABNF for CDDL . . . . . . . . . . 11 | Appendix A. Updated Collected ABNF for CDDL | |||
Appendix B. Details about Covering Errata Report 6543 . . . . . 13 | Appendix B. Details about Covering Erratum ID 6543 | |||
Change Proposed By Errata Report 6543 . . . . . . . . . . . . . 13 | B.1. Change Proposed by Erratum ID 6543 | |||
No Further Change Needed After Updating String Literal Grammar | B.2. No Further Change Needed after Updating String Literal | |||
(Section 2.1) . . . . . . . . . . . . . . . . . . . . . . . 14 | Grammar | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 15 | Acknowledgments | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 15 | Author's Address | |||
1. Introduction | 1. Introduction | |||
The Concise Data Definition Language (CDDL), as defined in [RFC8610] | The Concise Data Definition Language (CDDL), as defined in [RFC8610] | |||
and [RFC9165], provides an easy and unambiguous way to express | and [RFC9165], provides an easy and unambiguous way to express | |||
structures for protocol messages and data formats that are | structures for protocol messages and data formats that are | |||
represented in CBOR or JSON. | represented in CBOR or JSON. | |||
The present document updates [RFC8610] by addressing errata and | This document updates [RFC8610] by addressing errata reports and | |||
making other small fixes for the ABNF grammar defined for CDDL there. | making other small fixes for the ABNF grammar defined for CDDL. The | |||
The body of this document motivates and explains the updates; the | body of this document explains and shows motivation for the updates; | |||
updated collected ABNF syntax in Figure 11 in Appendix A replaces the | the updated collected ABNF syntax in Figure 11 in Appendix A replaces | |||
collected ABNF syntax in Appendix B of [RFC8610]. | the collected ABNF syntax in Appendix B of [RFC8610]. | |||
1.1. Conventions and Definitions | 1.1. Conventions and Definitions | |||
The Terminology from [RFC8610] applies. The grammar in [RFC8610] is | The terminology from [RFC8610] applies. The grammar in [RFC8610] is | |||
based on ABNF, which is defined in [STD68] and [RFC7405]. | based on ABNF, which is defined in [STD68] and [RFC7405]. | |||
2. Clarifications and Changes based on Errata Reports | 2. Clarifications and Changes Based on Errata Reports | |||
A number of errata reports have been made around some details of text | A number of errata reports have been made regarding some details of | |||
string and byte string literal syntax: [Err6527] and [Err6543]. | text string and byte string literal syntax: for example, [Err6527] | |||
These are being addressed in this section, updating details of the | and [Err6543]. These are being addressed in this section, updating | |||
ABNF for these literal syntaxes. Also, [Err6526] needs to be applied | details of the ABNF for these literal syntaxes. Also, the changes | |||
(backslashes have been lost during RFC processing in some text | described in [Err6526] need to be applied (backslashes have been lost | |||
during the RFC publication process of Section G.2, garbling the text | ||||
explaining backslash escaping). | explaining backslash escaping). | |||
These changes are intended to mirror the way existing implementations | These changes are intended to mirror the way existing implementations | |||
have dealt with the errata. They also use the opportunity presented | have dealt with the errata reports. This document also uses the | |||
by the necessary cleanup of the grammar of string literals for a | opportunity presented for the necessary cleanup of the grammar of | |||
backward compatible addition to the syntax for hexadecimal escapes. | string literals for a backward-compatible addition to the syntax for | |||
The latter change is not automatically forward compatible (i.e., CDDL | hexadecimal escapes. The latter change is not automatically forward | |||
specifications that make use of this syntax do not necessarily work | compatible (i.e., CDDL specifications that make use of this syntax do | |||
with existing implementations until these are updated, which this | not necessarily work with existing implementations until these are | |||
specification recommends). | updated, which is recommended in this specification). | |||
2.1. Updates to String Literal Grammar | 2.1. Updates to String Literal Grammar | |||
Err6527 (Text String Literals) | 2.1.1. Erratum ID 6527 (Text String Literals) | |||
The ABNF used in [RFC8610] for the content of text string literals is | The ABNF used in [RFC8610] for the content of text string literals is | |||
rather permissive: | rather permissive: | |||
; RFC 8610 ABNF: | ; ABNF from RFC 8610: | |||
text = %x22 *SCHAR %x22 | text = %x22 *SCHAR %x22 | |||
SCHAR = %x20-21 / %x23-5B / %x5D-7E / %x80-10FFFD / SESC | SCHAR = %x20-21 / %x23-5B / %x5D-7E / %x80-10FFFD / SESC | |||
SESC = "\" (%x20-7E / %x80-10FFFD) | SESC = "\" (%x20-7E / %x80-10FFFD) | |||
Figure 1: Original RFC 8610 ABNF for strings with permissive ABNF | ||||
for SESC, but not allowing hex escapes | Figure 1: Original ABNF from RFC 8610 for Strings with Permissive | |||
ABNF for SESC (Which Did Not Allow Hex Escapes) | ||||
This allows almost any non-C0 character to be escaped by a backslash, | This allows almost any non-C0 character to be escaped by a backslash, | |||
but critically misses out on the \uXXXX and \uHHHH\uLLLL forms that | but critically misses out on the \uXXXX and \uHHHH\uLLLL forms that | |||
JSON allows to specify characters in hex (which should be applying | JSON allows to specify characters in hex (which should be applied | |||
here according to Bullet 6 of Section 3.1 of [RFC8610]). (Note that | here according to item 6 of Section 3.1 of [RFC8610]). (Note that | |||
CDDL imports from JSON the unwieldy \uHHHH\uLLLL syntax, which | CDDL imports from JSON the unwieldy \uHHHH\uLLLL syntax, which | |||
represents Unicode code points beyond U+FFFF by making them look like | represents Unicode code points beyond U+FFFF by making them look like | |||
UTF-16 surrogate pairs; CDDL text strings are not using UTF-16 or | UTF-16 surrogate pairs; CDDL text strings do not use UTF-16 or | |||
surrogates.) | surrogates.) | |||
Both can be solved by updating the SESC rule. This document uses the | Both can be solved by updating the SESC rule. This document uses the | |||
opportunity to add a popular form of directly specifying characters | opportunity to add a popular form of directly specifying characters | |||
in strings using hexadecimal escape sequences of the form \u{hex}, | in strings using hexadecimal escape sequences of the form \u{hex}, | |||
where hex is the hexadecimal representation of the Unicode scalar | where hex is the hexadecimal representation of the Unicode scalar | |||
value. The result is the new set of rules defining SESC in Figure 2: | value. The result is the new set of rules defining SESC in Figure 2. | |||
; new rules collectively defining SESC: | ; new rules collectively defining SESC: | |||
SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\ | SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\ | |||
%x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t | %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t | |||
(%x75 hexchar) ) ; \uXXXX | (%x75 hexchar) ) ; \uXXXX | |||
hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" / | hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" / | |||
non-surrogate / (high-surrogate "\" %x75 low-surrogate) | non-surrogate / (high-surrogate "\" %x75 low-surrogate) | |||
non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG) / | non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG) / | |||
("D" %x30-37 2HEXDIG ) | ("D" %x30-37 2HEXDIG ) | |||
high-surrogate = "D" ("8"/"9"/"A"/"B") 2HEXDIG | high-surrogate = "D" ("8"/"9"/"A"/"B") 2HEXDIG | |||
low-surrogate = "D" ("C"/"D"/"E"/"F") 2HEXDIG | low-surrogate = "D" ("C"/"D"/"E"/"F") 2HEXDIG | |||
hexscalar = "10" 4HEXDIG / HEXDIG1 4HEXDIG | hexscalar = "10" 4HEXDIG / HEXDIG1 4HEXDIG | |||
/ non-surrogate / 1*3HEXDIG | / non-surrogate / 1*3HEXDIG | |||
HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F" | HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F" | |||
Figure 2: Update to string ABNF in Appendix B of RFC 8610: allow | Figure 2: Update to String ABNF in Appendix B of [RFC8610]: Allow | |||
hex escapes | Hex Escapes | |||
(Notes: In ABNF, strings such as "A", "B" etc. are case-insensitive, | | Notes: In ABNF, strings such as "A", "B", etc., are case | |||
as is intended here. The rules above could, instead of %x62, also | | insensitive, as is intended here. The rules above could have | |||
have used %s"b" etc., but didn't, in order to maximize ABNF tool | | also used %s"b", etc., instead of %x62, but didn't, in order to | |||
compatibility.) | | maximize compatibility of ABNF tools. | |||
Now that SESC is more restrictively formulated, this also requires an | Now that SESC is more restrictively formulated, an update to the | |||
update to the BCHAR rule used in the ABNF syntax for byte string | BCHAR rule used in the ABNF syntax for byte string literals is also | |||
literals: | required: | |||
; RFC 8610 ABNF: | ; ABNF from RFC 8610: | |||
bytes = [bsqual] %x27 *BCHAR %x27 | bytes = [bsqual] %x27 *BCHAR %x27 | |||
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF | BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF | |||
bsqual = "h" / "b64" | bsqual = "h" / "b64" | |||
Figure 3: Original RFC 8610 ABNF for BCHAR | ||||
With the SESC updated as above, \' is no longer allowed in BCHAR; | Figure 3: ABNF from RFC 8610 for BCHAR | |||
this now needs to be explicitly included; see below. | ||||
Err6278 (Consistent String Literals) | With the SESC updated as above, \' is no longer allowed in BCHAR and | |||
now needs to be explicitly included there; see Figure 4. | ||||
2.1.2. Erratum ID 6278 (Consistent String Literals) | ||||
Updating BCHAR also provides an opportunity to address [Err6278], | Updating BCHAR also provides an opportunity to address [Err6278], | |||
which points to an inconsistency in treating U+007F (DEL) between | which points to an inconsistency in treating U+007F (DEL) between | |||
SCHAR and BCHAR. As U+007F is not printable, including it in a byte | SCHAR and BCHAR. As U+007F is not printable, including it in a byte | |||
string literal is as confusing as for a text string literal, and it | string literal is as confusing as for a text string literal; | |||
should therefore be excluded from BCHAR as it is from SCHAR. The | therefore, it should be excluded from BCHAR as it is from SCHAR. The | |||
same reasoning also applies to the C1 control characters, so the | same reasoning also applies to the C1 control characters, so the | |||
updated ABNF actually excludes the entire range from U+007F to | updated ABNF actually excludes the entire range from U+007F to | |||
U+009F. The same reasoning then also applies to text in comments | U+009F. The same reasoning also applies to text in comments (PCHAR). | |||
(PCHAR). For completeness, all these should also explicitly exclude | For completeness, all these rules should also explicitly exclude the | |||
the code points that have been set aside for UTF-16's surrogates. | code points that have been set aside for UTF-16 surrogates. | |||
; new rules for SCHAR, BCHAR, and PCHAR: | ; new rules for SCHAR, BCHAR, and PCHAR: | |||
SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC | SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC | |||
BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF | BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF | |||
PCHAR = %x20-7E / NONASCII | PCHAR = %x20-7E / NONASCII | |||
NONASCII = %xA0-D7FF / %xE000-10FFFD | NONASCII = %xA0-D7FF / %xE000-10FFFD | |||
Figure 4: Update to ABNF in Appendix B of RFC 8610: BCHAR, SCHAR, | Figure 4: Update to ABNF in Appendix B of [RFC8610]: BCHAR, | |||
and PCHAR | SCHAR, and PCHAR | |||
(Note that, apart from addressing the inconsistencies, there is no | (Note that, apart from addressing the inconsistencies, there is no | |||
attempt to further exclude non-printable characters from the ABNF; | attempt to further exclude non-printable characters from the ABNF; | |||
doing this properly would draw in complexity from the ongoing | doing this properly would draw in complexity from the ongoing | |||
evolution of the Unicode standard that is not needed here.) | evolution of the Unicode standard [UNICODE] that is not needed here.) | |||
Addressing Err6526, Err6543 | 2.1.3. Addressing Erratum ID 6526 and Erratum ID 6543 | |||
The above changes also cover [Err6543] (a proposal to split off | The above changes also cover [Err6543] (a proposal to split off | |||
qualified byte string literals from UTF-8 byte string literals) and | qualified byte string literals from UTF-8 byte string literals) and | |||
[Err6526] (lost backslashes); see Appendix B for details. | [Err6526] (lost backslashes); see Appendix B for details. | |||
2.2. Examples Demonstrating the Updated String Syntaxes | 2.2. Examples Demonstrating the Updated String Syntaxes | |||
The CDDL example in Figure 5 demonstrates various escaping techniques | The CDDL example in Figure 5 demonstrates various escaping techniques | |||
now available for (byte and text) strings in CDDL. Obviously in the | now available for (byte and text) strings in CDDL. Obviously, in the | |||
literals for a and x, there is no need to escape the second | literals for a and x, there is no need to escape the second | |||
character, an o, as \u{6f}; this is just for demonstration. | character, an o, as \u{6f}; this is just for demonstration. | |||
Similarly, as shown in c and z there also is no need to escape the 🁳 | Similarly, as shown in c and z, there also is no need to escape the | |||
or ⌘, but escaping them may be convenient in order to limit the | "🁳" (DOMINO TILE VERTICAL-02-02, U+1F073) or "⌘" (PLACE OF INTEREST | |||
character repertoire of a CDDL file itself to ASCII [STD80]. | SIGN, U+2318); however, escaping them may be convenient in order to | |||
limit the character repertoire of a CDDL file itself to ASCII | ||||
[STD80]. | ||||
start = [a, b, c, x, y, z] | start = [a, b, c, x, y, z] | |||
; "🁳", DOMINO TILE VERTICAL-02-02, and | ; "🁳", DOMINO TILE VERTICAL-02-02, and | |||
; "⌘", PLACE OF INTEREST SIGN, in a text string: | ; "⌘", PLACE OF INTEREST SIGN, in a text string: | |||
a = "D\u{6f}mino's \u{1F073} + \u{2318}" ; \u{}-escape 3 chars | a = "D\u{6f}mino's \u{1F073} + \u{2318}" ; \u{}-escape 3 chars | |||
b = "Domino's \uD83C\uDC73 + \u2318" ; escape JSON-like | b = "Domino's \uD83C\uDC73 + \u2318" ; escape JSON-like | |||
c = "Domino's 🁳 + ⌘" ; unescaped | c = "Domino's 🁳 + ⌘" ; unescaped | |||
; in a byte string given as text, the ' needs to be escaped: | ; in a byte string given as text, the ' needs to be escaped: | |||
x = 'D\u{6f}mino\u{27}s \u{1F073} + \u{2318}' ; \u{}-escape 4 chars | x = 'D\u{6f}mino\u{27}s \u{1F073} + \u{2318}' ; \u{}-escape 4 chars | |||
y = 'Domino\'s \uD83C\uDC73 + \u2318' ; escape JSON-like | y = 'Domino\'s \uD83C\uDC73 + \u2318' ; escape JSON-like | |||
z = 'Domino\'s 🁳 + ⌘' ; escape ' only | z = 'Domino\'s 🁳 + ⌘' ; escape ' only | |||
Figure 5: Example text and byte string literals with various escaping | Figure 5: Example Text and Byte String Literals with Various Escaping | |||
techniques | Techniques | |||
In this example, the rules a to c and x to z all produce strings with | In this example, the rules a to c and x to z all produce strings with | |||
byte-wise identical content, where a to c are text strings, and x to | byte-wise identical content: a to c are text strings and x to z are | |||
z are byte strings. Figure 6 illustrates this by showing the output | byte strings. Figure 6 illustrates this by showing the output | |||
generated from the start rule in Figure 5, using pretty-printed | generated from the start rule in Figure 5, using pretty-printed | |||
hexadecimal. | hexadecimal. | |||
86 # array(6) | 86 # array(6) | |||
73 # text(19) | 73 # text(19) | |||
446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | |||
73 # text(19) | 73 # text(19) | |||
446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | |||
73 # text(19) | 73 # text(19) | |||
446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | |||
53 # bytes(19) | 53 # bytes(19) | |||
446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | |||
53 # bytes(19) | 53 # bytes(19) | |||
446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | |||
53 # bytes(19) | 53 # bytes(19) | |||
446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" | |||
Figure 6: Generated CBOR from CDDL example (Pretty-Printed | Figure 6: Generated CBOR from CDDL Example (Pretty-Printed | |||
Hexadecimal) | Hexadecimal) | |||
3. Small Enabling Grammar Changes | 3. Small Enabling Grammar Changes | |||
The two subsections in this section specify two small changes to the | Each subsection that follows specifies a small change to the grammar | |||
grammar that are intended to enable certain kinds of specifications. | that is intended to enable certain kinds of specifications. These | |||
These changes are backward compatible, i.e., CDDL files that comply | changes are backward compatible (i.e., CDDL files that comply with | |||
to [RFC8610] continue to match the updated grammar, but not | [RFC8610] continue to match the updated grammar) but not necessarily | |||
necessarily forward compatible, i.e., CDDL specifications that make | forward compatible (i.e., CDDL specifications that make use of these | |||
use of these changes cannot necessarily be processed by existing | changes cannot necessarily be processed by existing implementations | |||
[RFC8610] implementations. | of [RFC8610]). | |||
3.1. Empty data models | 3.1. Empty Data Models | |||
[RFC8610] requires a CDDL file to have at least one rule. | [RFC8610] requires a CDDL file to have at least one rule. | |||
; RFC 8610 ABNF: | ; ABNF from RFC 8610: | |||
cddl = S 1*(rule S) | cddl = S 1*(rule S) | |||
Figure 7: Original RFC 8610 ABNF for top-level rule cddl | Figure 7: ABNF from RFC 8610 for Top-Level Rule cddl | |||
This makes sense when the file has to stand alone, as a CDDL data | This makes sense when the file has to stand alone, as a CDDL data | |||
model needs to have at least one rule to provide an entry point | model needs to have at least one rule to provide an entry point | |||
(start rule). | (i.e., a start rule). | |||
With CDDL modules [I-D.ietf-cbor-cddl-modules], CDDL files can also | With CDDL modules [CDDL-MODULES], CDDL files can also include | |||
include directives, and these might be the source of all the rules | directives, and these might be the source of all the rules that | |||
that ultimately make up the module created by the file. Any other | ultimately make up the module created by the file. Any other rule | |||
rule content in the file has to be available for directive | content in the file has to be available for directive processing, | |||
processing, making the requirement for at least one rule cumbersome. | making the requirement for at least one rule cumbersome. | |||
Therefore, the present update extends the grammar as in Figure 8 and | Therefore, the present update extends the grammar as in Figure 8 and | |||
turns the existence of at least one rule into a semantic constraint, | turns the existence of at least one rule into a semantic constraint, | |||
to be fulfilled after processing of all directives. | to be fulfilled after processing of all directives. | |||
; new top-level rule: | ; new top-level rule: | |||
cddl = S *(rule S) | cddl = S *(rule S) | |||
Figure 8: Update to top-level ABNF in Appendices B and C of RFC 8610 | Figure 8: Update to Top-Level ABNF in Appendices B and C of RFC 8610 | |||
3.2. Non-literal Tag Numbers, Simple Values | 3.2. Non-Literal Tag Numbers and Simple Values | |||
The existing ABNF syntax for expressing tags in CDDL is: | The existing ABNF syntax for expressing tags in CDDL is as follows: | |||
; extracted from RFC 8610 ABNF: | ; extracted from the ABNF in RFC 8610: | |||
type2 =/ "#" "6" ["." uint] "(" S type S ")" | type2 =/ "#" "6" ["." uint] "(" S type S ")" | |||
Figure 9: Original RFC 8610 ABNF for tag syntax | Figure 9: Original ABNF from RFC 8610 for Tag Syntax | |||
This means tag numbers can only be given as literal numbers (uints). | This means tag numbers can only be given as literal numbers (uints). | |||
Some specifications operate on ranges of tag numbers, e.g., [RFC9277] | Some specifications operate on ranges of tag numbers; for example, | |||
has a range of tag numbers 1668546817 (0x63740101) to 1668612095 | [RFC9277] has a range of tag numbers 1668546817 (0x63740101) to | |||
(0x6374FFFF) to tag specific content formats. This can currently not | 1668612095 (0x6374FFFF) to tag specific content formats. This can | |||
be expressed in CDDL. Similar considerations apply to simple values | currently not be expressed in CDDL. Similar considerations apply to | |||
(#7.xx). | simple values (#7.xx). | |||
This update extends the syntax to: | This update extends the syntax to the following: | |||
; new rules collectively defining the tagged case: | ; new rules collectively defining the tagged case: | |||
type2 =/ "#" "6" ["." head-number] "(" S type S ")" | type2 =/ "#" "6" ["." head-number] "(" S type S ")" | |||
/ "#" "7" ["." head-number] | / "#" "7" ["." head-number] | |||
head-number = uint / ("<" type ">") | head-number = uint / ("<" type ">") | |||
Figure 10: Update to tag and simple value ABNF in Appendices B | Figure 10: Update to Tag and Simple Value ABNF in Appendices B | |||
and C of RFC 8610 | and C of RFC 8610 | |||
For #6, the head-number stands for the tag number. For #7, the head- | For #6, the head-number stands for the tag number. For #7, the head- | |||
number stands for the simple value if it is in the ranges 0..23 or | number stands for the simple value if it is in the ranges 0..23 or | |||
32..255 (as per Section 3.3 of RFC 8949 [STD94] the simple values | 32..255 (as per Section 3.3 of RFC 8949 [STD94], the simple values | |||
24..31 are not used). For 24..31, the head-number stands for the | 24..31 are not used). For 24..31, the head-number stands for the | |||
"additional information", e.g., #7.25 or #7.<25> is a float16, etc. | "additional information", e.g., #7.25 or #7.<25> is a float16, etc. | |||
(All ranges mentioned here are inclusive.) | (All ranges mentioned here are inclusive.) | |||
So the above range can be expressed in a CDDL fragment such as: | So the above range can be expressed in a CDDL fragment such as: | |||
ct-tag<content> = #6.<ct-tag-number>(content) | ct-tag<content> = #6.<ct-tag-number>(content) | |||
ct-tag-number = 1668546817..1668612095 | ct-tag-number = 1668546817..1668612095 | |||
; or use 0x63740101..0x6374FFFF | ; or use 0x63740101..0x6374FFFF | |||
Notes: | | Notes: | |||
| | ||||
1. This syntax reuses the angle bracket syntax for generics; this | | 1. This syntax reuses the angle bracket syntax for | |||
reuse is innocuous as a generic parameter/argument only ever | | generics; this reuse is innocuous because a generic | |||
occurs after a rule name (id), while it occurs after . here. | | parameter or argument only ever occurs after a rule name | |||
(Whether there is potential for human confusion can be debated; | | (id), while it occurs after the "." (dot) character | |||
the above example deliberately uses generics as well.) | | here. (Whether there is potential for human confusion | |||
| can be debated; the above example deliberately uses | ||||
2. The updated ABNF grammar makes it a bit more explicit that the | | generics as well.) | |||
number given after the optional dot is special, not giving the | | | |||
CBOR "additional information" for tags and simple values as it is | | 2. The updated ABNF grammar makes it a bit more explicit | |||
with other uses of # in CDDL. (Adding this observation to | | that the number given after the optional dot is the | |||
Section 2.2.3 of [RFC8610] is the subject of [Err6575]; it is | | value of the argument: for tags and simple values, it is | |||
correctly noted in Section 3.6 of [RFC8610].) In hindsight, | | not giving the CBOR "additional information”, as it is | |||
maybe a different character than the dot should have been chosen | | with other uses of # in CDDL. (Adding this observation | |||
for this special case, however changing the grammar now would | | to Section 2.2.3 of [RFC8610] is the subject of | |||
have been too disruptive. | | [Err6575]; it is correctly noted in Section 3.6 of | |||
| [RFC8610].) In hindsight, maybe a different character | ||||
| than the dot should have been chosen for this special | ||||
| case; however, changing the grammar in the current | ||||
| document would have been too disruptive. | ||||
4. Security Considerations | 4. Security Considerations | |||
The grammar fixes and updates in this document are not believed to | The grammar fixes and updates in this document are not believed to | |||
create additional security considerations. The security | create additional security considerations. The security | |||
considerations in Section 5 of [RFC8610] do apply, and specifically | considerations in Section 5 of [RFC8610] apply. Specifically, the | |||
the potential for confusion is increased in an environment that uses | potential for confusion is increased in an environment that uses a | |||
a combination of CDDL tools some of which have been updated and some | combination of CDDL tools, some of which have been updated and some | |||
of which have not been, in particular based on Section 2. | of which have not, in particular based on Section 2. | |||
Attackers may want to exploit such potential confusion by crafting | Attackers may want to exploit such potential confusion by crafting | |||
CDDL models that are interpreted differently by different parts of a | CDDL models that are interpreted differently by different parts of a | |||
system. There will be a period of transition from the details that | system. There will be a period of transition from the details that | |||
the [RFC8610] grammar handled in a less well-defined way, to the | the grammar in [RFC8610] handled in a less-well-defined way, to the | |||
updated grammar defined in the present document. This transition | updated grammar defined in the present document. This transition | |||
might offer one, but not the only kind of opportunity for the kind of | might offer one (but not the only) type of opportunity for the kind | |||
attack that relies on differences between implementations. | of attack that relies on differences between implementations. | |||
Implementations that make use of CDDL models operationally already | Implementations that make use of CDDL models operationally already | |||
need to ascertain the provenance (and thus authenticity and | need to ascertain the provenance (and thus authenticity and | |||
integrity) and applicability of models they employ. At the time of | integrity) and applicability of models they employ. At the time of | |||
writing, it is expected that the models will generally be processed | writing, it is expected that the models will generally be processed | |||
by a software developer, within a software development environment. | by a software developer, within a software-development environment. | |||
Developers are therefore advised to treat CDDL models with the same | Therefore, developers are advised to treat CDDL models with the same | |||
care as any other source code. | care as any other source code. | |||
5. IANA Considerations | 5. IANA Considerations | |||
This document has no IANA actions. | This document has no IANA actions. | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
[RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/rfc/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[STD68] Internet Standard 68, | [STD68] Internet Standard 68, | |||
<https://www.rfc-editor.org/info/std68>. | <https://www.rfc-editor.org/info/std68>. | |||
At the time of writing, this STD comprises the following: | At the time of writing, this STD comprises the following: | |||
Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
<https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
skipping to change at page 10, line 5 ¶ | skipping to change at line 419 ¶ | |||
<https://www.rfc-editor.org/info/std94>. | <https://www.rfc-editor.org/info/std94>. | |||
At the time of writing, this STD comprises the following: | At the time of writing, this STD comprises the following: | |||
Bormann, C. and P. Hoffman, "Concise Binary Object | Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
6.2. Informative References | 6.2. Informative References | |||
[Err6278] "Errata Report 6278", RFC 8610, | [CDDL-MODULES] | |||
Bormann, C. and B. Moran, "CDDL Module Structure", Work in | ||||
Progress, Internet-Draft, draft-ietf-cbor-cddl-modules-03, | ||||
1 September 2024, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-cbor-cddl-modules-03>. | ||||
[EDN-LITERALS] | ||||
Bormann, C., "CBOR Extended Diagnostic Notation (EDN)", | ||||
Work in Progress, Internet-Draft, draft-ietf-cbor-edn- | ||||
literals-13, 3 November 2024, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-cbor- | ||||
edn-literals-13>. | ||||
[Err6278] RFC Errata, Erratum ID 6278, RFC 8610, | ||||
<https://www.rfc-editor.org/errata/eid6278>. | <https://www.rfc-editor.org/errata/eid6278>. | |||
[Err6526] "Errata Report 6526", RFC 8610, | [Err6526] RFC Errata, Erratum ID 6526, RFC 8610, | |||
<https://www.rfc-editor.org/errata/eid6526>. | <https://www.rfc-editor.org/errata/eid6526>. | |||
[Err6527] "Errata Report 6527", RFC 8610, | [Err6527] RFC Errata, Erratum ID 6527, RFC 8610, | |||
<https://www.rfc-editor.org/errata/eid6527>. | <https://www.rfc-editor.org/errata/eid6527>. | |||
[Err6543] "Errata Report 6543", RFC 8610, | [Err6543] RFC Errata, Erratum ID 6543, RFC 8610, | |||
<https://www.rfc-editor.org/errata/eid6543>. | <https://www.rfc-editor.org/errata/eid6543>. | |||
[Err6575] "Errata Report 6575", RFC 8610, | [Err6575] RFC Errata, Erratum ID 6575, RFC 8610, | |||
<https://www.rfc-editor.org/errata/eid6575>. | <https://www.rfc-editor.org/errata/eid6575>. | |||
[I-D.ietf-cbor-cddl-modules] | ||||
Bormann, C. and B. Moran, "CDDL Module Structure", Work in | ||||
Progress, Internet-Draft, draft-ietf-cbor-cddl-modules-02, | ||||
4 March 2024, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-cbor-cddl-modules-02>. | ||||
[I-D.ietf-cbor-edn-literals] | ||||
Bormann, C., "CBOR Extended Diagnostic Notation (EDN): | ||||
Application-Oriented Literals, ABNF, and Media Type", Work | ||||
in Progress, Internet-Draft, draft-ietf-cbor-edn-literals- | ||||
09, 18 May 2024, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-cbor-edn-literals-09>. | ||||
[RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | [RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | |||
RFC 7405, DOI 10.17487/RFC7405, December 2014, | RFC 7405, DOI 10.17487/RFC7405, December 2014, | |||
<https://www.rfc-editor.org/rfc/rfc7405>. | <https://www.rfc-editor.org/info/rfc7405>. | |||
[RFC9165] Bormann, C., "Additional Control Operators for the Concise | [RFC9165] Bormann, C., "Additional Control Operators for the Concise | |||
Data Definition Language (CDDL)", RFC 9165, | Data Definition Language (CDDL)", RFC 9165, | |||
DOI 10.17487/RFC9165, December 2021, | DOI 10.17487/RFC9165, December 2021, | |||
<https://www.rfc-editor.org/rfc/rfc9165>. | <https://www.rfc-editor.org/info/rfc9165>. | |||
[RFC9277] Richardson, M. and C. Bormann, "On Stable Storage for | [RFC9277] Richardson, M. and C. Bormann, "On Stable Storage for | |||
Items in Concise Binary Object Representation (CBOR)", | Items in Concise Binary Object Representation (CBOR)", | |||
RFC 9277, DOI 10.17487/RFC9277, August 2022, | RFC 9277, DOI 10.17487/RFC9277, August 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9277>. | <https://www.rfc-editor.org/info/rfc9277>. | |||
[STD80] Internet Standard 80, | [STD80] Internet Standard 80, | |||
<https://www.rfc-editor.org/info/std80>. | <https://www.rfc-editor.org/info/std80>. | |||
At the time of writing, this STD comprises the following: | At the time of writing, this STD comprises the following: | |||
Cerf, V., "ASCII format for network interchange", STD 80, | Cerf, V., "ASCII format for network interchange", STD 80, | |||
RFC 20, DOI 10.17487/RFC0020, October 1969, | RFC 20, DOI 10.17487/RFC0020, October 1969, | |||
<https://www.rfc-editor.org/info/rfc20>. | <https://www.rfc-editor.org/info/rfc20>. | |||
[UNICODE] The Unicode Consortium, "The Unicode Standard", | ||||
<https://www.unicode.org/versions/latest/>. | ||||
Appendix A. Updated Collected ABNF for CDDL | Appendix A. Updated Collected ABNF for CDDL | |||
This appendix is normative. | This appendix is normative. | |||
It provides the full ABNF from [RFC8610] with the updates applied in | It provides the full ABNF from [RFC8610] as updated by the present | |||
the present document. | document. | |||
cddl = S *(rule S) | cddl = S *(rule S) | |||
rule = typename [genericparm] S assignt S type | rule = typename [genericparm] S assignt S type | |||
/ groupname [genericparm] S assigng S grpent | / groupname [genericparm] S assigng S grpent | |||
typename = id | typename = id | |||
groupname = id | groupname = id | |||
assignt = "=" / "/=" | assignt = "=" / "/=" | |||
assigng = "=" / "//=" | assigng = "=" / "//=" | |||
skipping to change at page 13, line 29 ¶ | skipping to change at line 590 ¶ | |||
S = *WS | S = *WS | |||
WS = SP / NL | WS = SP / NL | |||
SP = %x20 | SP = %x20 | |||
NL = COMMENT / CRLF | NL = COMMENT / CRLF | |||
COMMENT = ";" *PCHAR CRLF | COMMENT = ";" *PCHAR CRLF | |||
PCHAR = %x20-7E / NONASCII | PCHAR = %x20-7E / NONASCII | |||
NONASCII = %xA0-D7FF / %xE000-10FFFD | NONASCII = %xA0-D7FF / %xE000-10FFFD | |||
CRLF = %x0A / %x0D.0A | CRLF = %x0A / %x0D.0A | |||
Figure 11: ABNF for CDDL as updated | Figure 11: ABNF for CDDL as Updated | |||
Appendix B. Details about Covering Errata Report 6543 | Appendix B. Details about Covering Erratum ID 6543 | |||
This appendix is informative. | This appendix is informative. | |||
[Err6543] observes that the ABNF used in [RFC8610] for the content of | [Err6543] notes that the ABNF used in [RFC8610] for the content of | |||
byte string literals lumps together byte strings notated as text with | byte string literals lumps together byte strings notated as text with | |||
byte strings notated in base16 (hex) or base64 (but see also updated | byte strings notated in base16 (hex) or base64 (but see also updated | |||
BCHAR rule in Figure 4): | BCHAR rule in Figure 4): | |||
; RFC 8610 ABNF: | ; ABNF from RFC 8610: | |||
bytes = [bsqual] %x27 *BCHAR %x27 | bytes = [bsqual] %x27 *BCHAR %x27 | |||
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF | BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF | |||
Figure 12: Original RFC 8610 ABNF for BCHAR | Figure 12: Original ABNF from RFC 8610 for BCHAR | |||
Change Proposed By Errata Report 6543 | B.1. Change Proposed by Erratum ID 6543 | |||
Errata report 6543 proposes to handle the two cases in separate ABNF | Erratum ID 6543 proposes handling the two cases in separate ABNF | |||
rules (where, with an updated SESC, BCHAR obviously needs to be | rules (where, with an updated SESC, BCHAR obviously needs to be | |||
updated as above): | updated as above): | |||
; Err6543 proposal: | ; Proposal from Erratum ID 6543: | |||
bytes = %x27 *BCHAR %x27 | bytes = %x27 *BCHAR %x27 | |||
/ bsqual %x27 *QCHAR %x27 | / bsqual %x27 *QCHAR %x27 | |||
BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF | BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF | |||
QCHAR = DIGIT / ALPHA / "+" / "/" / "-" / "_" / "=" / WS | QCHAR = DIGIT / ALPHA / "+" / "/" / "-" / "_" / "=" / WS | |||
Figure 13: Errata Report 8653 Proposal to Split the Byte String Rules | Figure 13: Proposal from Erratum ID 6543 to Split the Byte String | |||
Rules | ||||
This potentially causes a subtle change, which is hidden in the WS | This potentially causes a subtle change, which is hidden in the WS | |||
rule: | rule: | |||
; RFC 8610 ABNF: | ; ABNF from RFC 8610: | |||
WS = SP / NL | WS = SP / NL | |||
SP = %x20 | SP = %x20 | |||
NL = COMMENT / CRLF | NL = COMMENT / CRLF | |||
COMMENT = ";" *PCHAR CRLF | COMMENT = ";" *PCHAR CRLF | |||
PCHAR = %x20-7E / %x80-10FFFD | PCHAR = %x20-7E / %x80-10FFFD | |||
CRLF = %x0A / %x0D.0A | CRLF = %x0A / %x0D.0A | |||
Figure 14: ABNF definition of WS from RFC 8610 | Figure 14: ABNF Definition of WS from RFC 8610 | |||
This allows any non-C0 character in a comment, so this fragment | This allows any non-C0 character in a comment, so this fragment | |||
becomes possible: | becomes possible: | |||
foo = h' | foo = h' | |||
43424F52 ; 'CBOR' | 43424F52 ; 'CBOR' | |||
0A ; LF, but don't use CR! | 0A ; LF, but don't use CR! | |||
' | ' | |||
The current text is not unambiguously saying whether the three | The current text is not unambiguously saying whether the three | |||
apostrophes need to be escaped with a \ or not, as in: | apostrophes need to be escaped with a \ or not, as in: | |||
foo = h' | foo = h' | |||
43424F52 ; \'CBOR\' | 43424F52 ; \'CBOR\' | |||
0A ; LF, but don\'t use CR! | 0A ; LF, but don\'t use CR! | |||
' | ' | |||
... which would be supported by the existing ABNF in [RFC8610]. | ... which would be supported by the existing ABNF in [RFC8610]. | |||
No Further Change Needed After Updating String Literal Grammar | B.2. No Further Change Needed after Updating String Literal Grammar | |||
(Section 2.1) | ||||
This document takes the simpler approach of leaving the processing of | This document takes the simpler approach of leaving the processing of | |||
the content of the byte string literal to a semantic step after | the content of the byte string literal to a semantic step after | |||
processing the syntax of the bytes/BCHAR rules, as updated by | processing the syntax of the bytes and BCHAR rules, as updated by | |||
Figure 2 and Figure 4 in Section 2.1 (updates prompted by the | Figures 2 and 4 in Section 2.1 (updates prompted by the combination | |||
combination of [Err6527] and [Err6278]). | of [Err6527] and [Err6278]). | |||
The rules in Figure 14 (as updated by Figure 4) are therefore applied | Therefore, the rules in Figure 14 (as updated by Figure 4) are | |||
to the result of this processing where bsqual is given as h or b64. | applied to the result of this processing where bsqual is given as h | |||
or b64. | ||||
Note that this approach also works well with the use of byte strings | Note that this approach also works well with the use of byte strings | |||
in Section 3 of [RFC9165]. It does require some care when copy- | in Section 3 of [RFC9165]. It does require some care when copying- | |||
pasting into CDDL models from ABNF that contains single quotes (which | and-pasting into CDDL models from ABNF that contain single quotes | |||
may also hide as apostrophes in comments); these need to be escaped | (which may also hide as apostrophes in comments); these need to be | |||
or possibly replaced by %x27. | escaped or possibly replaced by %x27. | |||
Finally, the approach taken lends support to extending bsqual in CDDL | Finally, the approach taken lends support to extending bsqual in CDDL | |||
similar to the way this is done for CBOR diagnostic notation in | similar to the way this is done for CBOR diagnostic notation in | |||
[I-D.ietf-cbor-edn-literals]. (Note that the processing of string | [EDN-LITERALS]. (Note that, at the time of writing, the processing | |||
literals now is quite similar between CDDL and EDN, except that CDDL | of string literals is quite similar for both CDDL and Extended | |||
has ";"-based end-of-line comments, while EDN has two comment | Diagnostic Notation (EDN), except that CDDL has end-of-line comments | |||
syntaxes, in-line "/"-based and end-of-line "#"-based.) | that are ";" based and EDN has two comment syntaxes: those that are | |||
in-line "/" based and those that are end-of-line "#" based.) | ||||
Acknowledgments | Acknowledgments | |||
Many thanks go to the submitters of the errata reports addressed in | Many thanks go to the submitters of the errata reports addressed in | |||
this document. In one of the ensuing discussions, Doug Ewell | this document. In one of the ensuing discussions, Doug Ewell | |||
proposed to define an ABNF rule NONASCII, of which we have included | proposed defining an ABNF rule "NONASCII", of which we have included | |||
the essence. Special thanks to the reviewers Marco Tiloca, Christian | the essence. Special thanks to the reviewers Marco Tiloca, Christian | |||
Amsüss (shepherd review and further guidance), Orie Steele (AD review | Amsüss ( Shepherd Review and further guidance), Orie Steele (AD | |||
and further guidance), and Éric Vyncke (detailed IESG review). | Review and further guidance), and Éric Vyncke (detailed IESG review). | |||
Author's Address | Author's Address | |||
Carsten Bormann | Carsten Bormann | |||
Universität Bremen TZI | Universität Bremen TZI | |||
Postfach 330440 | Postfach 330440 | |||
D-28359 Bremen | D-28359 Bremen | |||
Germany | Germany | |||
Phone: +49-421-218-63921 | Phone: +49-421-218-63921 | |||
Email: cabo@tzi.org | Email: cabo@tzi.org | |||
End of changes. 87 change blocks. | ||||
239 lines changed or deleted | 233 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |