The "crit" header parameter has been made unnecessarily complicated. It should
say the "crit" parameter is an array of strings; a JOSE message MUST be
rejected if any of the strings in the array is not understood.
The current definition includes additional constraints: the array "MUST NOT
include header parameters defined by this specification, duplicate names, or
names that do not occur as header parameters within the {JWE|JWS}".
This extra "MUST NOT" just adds extra work for implementations. Instead of
simply checking that each "crit" string is in an implementation’s hardwired
list of understood strings (probably 1 line of code in many languages), an
implementation additionally has to check each "crit" string against headers
defined in JWE/JWS specs (which version?), and check for duplicates, and check
that each "crit" string is present in the JOSE message (at the top level?).
I cannot see any benefit from these additional checks; just an extra burden on
implementers. I am also sure many implementation will not bother enforcing
these additional checks, making them an interop mess.
"crit" strings need a registry. We should replace the "typ" registry with a
registry of "crit" values. "typ" was ill-defined even before a recent draft
muddied it further by defining different values based on the serialization
being used (eg "typ":"JWE" and "typ":"JWE-JS").
P.S. We really need to stop defining so many things in duplicate or worse -- in
JWS and in JWE. We really need to define a JOSE message.
--
James Manger
_______________________________________________
jose mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/jose