rfc9682v2.txt   rfc9682.txt 
skipping to change at line 100 skipping to change at line 100
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 regarding some details of A number of errata reports have been made regarding some details of
text string and byte string literal syntax: for example, [Err6527] text string and byte string literal syntax: for example, [Err6527]
and [Err6543]. These are being addressed in this section, updating and [Err6543]. These are being addressed in this section, updating
details of the ABNF for these literal syntaxes. Also, the changes details of the ABNF for these literal syntaxes. Also, the changes
described in [Err6526] need to be applied (backslashes have been lost described in [Err6526] need to be applied (backslashes have been lost
during the RFC publication process of Appendix G.2, garbling the text during the RFC publication process of Appendix G.2 of [RFC8610],
explaining backslash escaping). garbling the text 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 reports. This document also uses the have dealt with the errata reports. This document also uses the
opportunity presented for the necessary cleanup of the grammar of opportunity presented by the necessary cleanup of the grammar of
string literals for a backward-compatible addition to the syntax for string literals for a backward-compatible addition to the syntax for
hexadecimal escapes. The latter change is not automatically forward hexadecimal escapes. The latter change is not automatically forward
compatible (i.e., CDDL specifications that make use of this syntax do compatible (i.e., CDDL specifications that make use of this syntax do
not necessarily work with existing implementations until these are not necessarily work with existing implementations until these are
updated, which is recommended in this specification). updated, which is recommended by this specification).
2.1. Updates to String Literal Grammar 2.1. Updates to String Literal Grammar
2.1.1. Erratum ID 6527 (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:
; ABNF from RFC 8610: ; 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 ABNF from RFC 8610 for Strings with Permissive Figure 1: Original ABNF from RFC 8610 for Strings with Permissive
ABNF for SESC (Which Did Not Allow Hex Escapes) 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 applied JSON allows to specify characters in hex (which should apply here
here according to item 6 of Section 3.1 of [RFC8610]). (Note that according to item 6 of Section 3.1 of [RFC8610]). (Note that CDDL
CDDL imports from JSON the unwieldy \uHHHH\uLLLL syntax, which imports from JSON the unwieldy \uHHHH\uLLLL syntax, which represents
represents Unicode code points beyond U+FFFF by making them look like Unicode code points beyond U+FFFF by making them look like UTF-16
UTF-16 surrogate pairs; CDDL text strings do not use UTF-16 or 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
skipping to change at line 162 skipping to change at line 161
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 [RFC8610]: 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 | Notes: In ABNF, strings such as "A", "B", etc., are case
| insensitive, as is intended here. The rules above could have | insensitive, as is intended here. The rules above could have
| also used %s"b", etc., instead of %x62, but didn't, in order to | also used %s"b", etc., instead of %x62, but didn't, in order to
| maximize compatibility of ABNF tools. | maximize compatibility with ABNF tools.
Now that SESC is more restrictively formulated, an update to the Now that SESC is more restrictively formulated, an update to the
BCHAR rule used in the ABNF syntax for byte string literals is also BCHAR rule used in the ABNF syntax for byte string literals is also
required: required:
; ABNF from RFC 8610: ; 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"
skipping to change at line 312 skipping to change at line 311
The existing ABNF syntax for expressing tags in CDDL is as follows: The existing ABNF syntax for expressing tags in CDDL is as follows:
; extracted from the ABNF in RFC 8610: ; extracted from the ABNF in RFC 8610:
type2 =/ "#" "6" ["." uint] "(" S type S ")" type2 =/ "#" "6" ["." uint] "(" S type S ")"
Figure 9: Original ABNF from RFC 8610 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; for example, Some specifications operate on ranges of tag numbers; for example,
[RFC9277] has a range of tag numbers 1668546817 (0x63740101) to [RFC9277] has a range of tag numbers 1668546817 (0x63740101) to
1668612095 (0x6374FFFF) to tag specific content formats. This can 1668612095 (0x6374FFFF) to tag specific content formats. This cannot
currently not be expressed in CDDL. Similar considerations apply to currently be expressed in CDDL. Similar considerations apply to
simple values (#7.xx). simple values (#7.xx).
This update extends the syntax to the following: 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
skipping to change at line 373 skipping to change at line 372
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] apply. Specifically, the considerations in Section 5 of [RFC8610] apply. Specifically, the
potential for confusion is increased in an environment that uses a potential for confusion is increased in an environment that uses 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, 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 grammar in [RFC8610] 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) type of opportunity for the kind might offer one (but not the only) type of opportunity for the kind
of 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.
Therefore, developers are 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
skipping to change at line 667 skipping to change at line 666
processing the syntax of the bytes and BCHAR rules, as updated by processing the syntax of the bytes and BCHAR rules, as updated by
Figures 2 and 4 in Section 2.1 (updates prompted by the combination Figures 2 and 4 in Section 2.1 (updates prompted by the combination
of [Err6527] and [Err6278]). of [Err6527] and [Err6278]).
Therefore, the rules in Figure 14 (as updated by Figure 4) are Therefore, the rules in Figure 14 (as updated by Figure 4) are
applied to the result of this processing where bsqual is given as h applied to the result of this processing where bsqual is given as h
or b64. 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 copying- in Section 3 of [RFC9165]. It does require some care when copying-
and-pasting into CDDL models from ABNF that contain single quotes and-pasting into CDDL models from ABNF that contains single quotes
(which may also hide as apostrophes in comments); these need to be (which may also hide as apostrophes in comments); these need to be
escaped 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
[EDN-LITERALS]. (Note that, at the time of writing, the processing [EDN-LITERALS]. (Note that, at the time of writing, the processing
of string literals is quite similar for both CDDL and Extended of string literals is quite similar for both CDDL and Extended
Diagnostic Notation (EDN), except that CDDL has end-of-line comments Diagnostic Notation (EDN), except that CDDL has end-of-line comments
that are ";" based and EDN has two comment syntaxes: those that are that are ";" based and EDN has two comment syntaxes: one in-line "/"
in-line "/" based and those that are end-of-line "#" based.) based and one 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 defining 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 Amsüss (Shepherd Review and further guidance), Orie Steele (AD Review
Review and further guidance), and Éric Vyncke (detailed IESG 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. 11 change blocks. 
20 lines changed or deleted 19 lines changed or added

This html diff was produced by rfcdiff 1.48.