Re: [Cbor] 7049bis: The concept of "optional tagging" is not really used in practice #126

Laurence Lundblade <> Sun, 03 November 2019 21:02 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id E876E1200CE for <>; Sun, 3 Nov 2019 13:02:19 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.898
X-Spam-Status: No, score=-1.898 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id yHltrcGk0w3c for <>; Sun, 3 Nov 2019 13:02:17 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id BE6D31200C1 for <>; Sun, 3 Nov 2019 13:02:17 -0800 (PST)
Received: from [] ([]) by :SMTPAUTH: with ESMTPA id RN0qiNlpIksi3RN0qi1Hpi; Sun, 03 Nov 2019 14:02:17 -0700
From: Laurence Lundblade <>
Message-Id: <>
Content-Type: multipart/alternative; boundary="Apple-Mail=_4772C1B3-3AC1-43A3-AE80-A83692423BB4"
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\))
Date: Sun, 3 Nov 2019 13:02:16 -0800
In-Reply-To: <>
Cc: Christophe Lohr <>,
To: Carsten Bormann <>
References: <> <> <> <>
X-Mailer: Apple Mail (2.3445.104.11)
X-CMAE-Envelope: MS4wfBGFX0Nw9F0SAlY0QQlz97h469bxm2/93oHJn4mMUl5lBUsqByuuIdB2mqsKEPcpLA9eNzet1HpolKuM1FSkWmKTZQIZINDIi4qSyDrYL6g/j2KSX9V1 B2PnCH4/gJfSWp80qca5swhhT7U//8XgkikoDorfe7d72bVoee2d+8/iM/JmqbgnBBhHh0nSuj2E8unKDL5XTIhU8PKi0wbpZJ8xMendHww5nrYmQrQA6WEj
Archived-At: <>
Subject: Re: [Cbor] 7049bis: The concept of "optional tagging" is not really used in practice #126
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Concise Binary Object Representation \(CBOR\)" <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sun, 03 Nov 2019 21:02:20 -0000

OK. I understand.  To use it one of these new types in CDDL, particularly those with a internal structure, you make a pair of CDDL headers, one for tagged and one for untagged that describe it like COSE did (from 8152):

   COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message

   COSE_Untagged_Message = COSE_Sign / COSE_Sign1 /
       COSE_Encrypt / COSE_Encrypt0 /
       COSE_Mac / COSE_Mac0

   COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged /
       COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged /
       COSE_Mac_Tagged / COSE_Mac0_Tagged


   COSE_Sign1_Tagged = #6.18(COSE_Sign1)

   COSE_Sign1 = [
       payload : bstr / nil,
       signature : bstr

Would be cool if there were standard CDDL definitions ready for normative reference for all the “tagged” data types defined in 7049 / 7049bis.


> On Nov 3, 2019, at 8:59 AM, Carsten Bormann <> wrote:
> Hi Laurence,
> CDDL does not describe behavior, but the shape of data.
>> Maybe a key question here is whether you can say in CDDL “this next item must always be interpreted as a date even though it will never have a date tag”.
> CDDL can say “this item is a number”.  It does not tell you how to “interpret” things, that would be the job of a language that transforms the data just received into data that is used by an application.
>> If CDDL doesn’t have than, then you can’t describe some CBOR-protocols with it.
> You sure can “describe” the shape of data in CBOR protocols, but you will also need some information about how you plan to interpret the data.
>> CWT would be one of those protocols as it forbids adding the tag to dates.
> (For the exp, nbf, and iat claims, or claim numbers 4 to 6:) Yes, the CWT RFC (RFC 8392) tells you that the value here is a number, not a tagged date.
>> The designer of a protocol using a new data type will indicate in their protocol for each occurrence of it whether the tag must be present or not (never saying the tag may or may not be present). The designer will typically require the tag only when necessary to disambiguate the type of the data item.
> Right.  If you need to register for CWT a new claim that could either take a number (such as the longitude of the satellite that this claim is about) or a date/time (such as the time the satellite was launched), then a tag could be useful to make that distinction.  
> That example is a bit contrived, because it’s just not as usual to have a choice between a number and a date.  More likely might be a choice between a date/time represented as a Tag 1 and a Tag 1001.  The encoding could choose to leave off the tag from the number that is the enclosed item of Tag 1, so you would have a choice between a number and a Tag 1001.
>> The implementor of a general purpose library to generate one of these new data item types must give the caller the option to include or not include the tag. Maybe this is just by never automatically outputting the tag and having a distinct output tag function.
>> The implementor of a general purpose library to decode one of these new data types must allow the caller to say that the next data item should be decoded as this new data type whether or not it is tagged. Maybe it even errors out if it is tagged for the cases where the protocol document says no tag should be used.
> Right.
>> What I don’t know is whether CDDL can describe all this desired behavior.
> CDDL can describe the shape of the data interchanged, but it can’t describe the mapping to application semantics.  It can provide hints, and that’s one of the things that the unwrap operator is good for: When you apply it to a tag, this is a hint that you do not just want the data shape of that tag’d enclosed item, but also its semantics.
> Grüße, Carsten