<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-jose-json-proof-token-13" submissionType="IETF" category="std" xml:lang="en" indexInclude="true" consensus="true" tocDepth="4">

<front>
<title abbrev="json-proof-token">JSON Proof Token and CBOR Proof Token</title><seriesInfo value="draft-ietf-jose-json-proof-token-13" stream="IETF" status="standard" name="Internet-Draft"/>
<author initials="M." surname="Jones" fullname="Michael B. Jones"><organization>Self-Issued Consulting</organization><address><postal><street/>
</postal><email>michael_b_jones@hotmail.com</email>
<uri>https://self-issued.info/</uri>
</address></author><author initials="D." surname="Waite" fullname="David Waite"><organization>Ping Identity</organization><address><postal><street/>
</postal><email>dwaite+jwp@pingidentity.com</email>
</address></author><author initials="J." surname="Miller" fullname="Jeremie Miller"><organization>Ping Identity</organization><address><postal><street/>
</postal><email>jmiller@pingidentity.com</email>
</address></author><date/>
<area>Internet</area>
<workgroup>jose</workgroup>
<keyword>json</keyword>
<keyword>jose</keyword>
<keyword>zkp</keyword>
<keyword>jwp</keyword>
<keyword>jws</keyword>
<keyword>jpt</keyword>
<keyword>cbor</keyword>
<keyword>cose</keyword>
<keyword>cpt</keyword>

<abstract>
<t>JSON Proof Token (JPT) is a compact, URL-safe, privacy-preserving
representation of claims to be transferred between three parties.  The
claims in a JPT are encoded as base64url-encoded JSON objects that are
used as the payloads of a JSON Web Proof (JWP) structure, enabling them
to be digitally signed and selectively disclosed.  JPTs also support
reusability and unlinkability when using Zero-Knowledge Proofs (ZKPs).</t>
<t>A CBOR-based representation of JPTs is also defined, called a CBOR Proof
Token (CPT).  It has the same properties as JPTs, but uses the JSON Web
Proof (JWP) CBOR Serialization, rather than the JSON-based JWP Compact
Serialization.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>JSON Proof Token (JPT) is a compact claims representation format
intended to be used in the same ways as a JSON Web Token (JWT)
<xref target="RFC7519"/>, but with additional support for selective disclosure and
unlinkability.  JPTs encode claim values to be transmitted as payloads
of a JSON Web Proof (JWP) <xref target="I-D.ietf-jose-json-web-proof"/>.  JPTs are
always represented using the JWP Compact Serialization.  The
corresponding claim names are not transmitted in the payloads and are
stored in a separate structure that can be externalized and shared
across multiple JPTs.</t>
<t>Likewise, CBOR Proof Token (CPT) is a similar compact claims
representation format intended to be used in the same ways as a CBOR Web
Token (CWT) <xref target="RFC8392"/>, but with the same support for selective
disclosure and unlinkability.  CPTs are represented using the JWP CBOR
Serialization.  The corresponding claim names are not transmitted in the
payloads and are stored in a separate structure that can be externalized
and shared across multiple CPTs.</t>
</section>

<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP 14
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
</section>

<section anchor="background"><name>Background</name>
<t>JWP defines a container binding together an integrity-protected Header,
one or more payload slots, and a cryptographic proof.  It does not
define how claims are organized into payloads and what formats they are
in.  JPTs are intended to be as close to a JWT as possible, while also
supporting the selective disclosure and unlinkability of JWPs.
Likewise, CPTs are intended to be as close to a CWT as possible, while
also supporting the selective disclosure and unlinkability of JWPs.</t>
</section>

<section anchor="design-considerations"><name>Design Considerations</name>
<t>The rationale behind the design for JSON Proof Tokens and CBOR Proof
Tokens is important when considering how they are structured.  These
sections detail the underlying reasoning informing their design.</t>

<section anchor="unlinkability"><name>Unlinkability</name>
<t>Supporting unlinkability is perhaps the most challenging design
constraint for JPTs and CPTs.  Even the smallest oversight can introduce
a subtle vector for relying parties to collude and correlate one or more
subjects across their usage.</t>
<t>The principal tools to prevent this are data minimization and
uniformity.  The data included SHOULD be minimized to remove potential
correlation points.  The data SHOULD contain only values that are able
to be selectively disclosed with consent or transformed by the proof
algorithm when presented.</t>
<t>Any other data that is repeated across multiple JPTs or CPTs is
externalized so that it is uniform across every issuance.  This includes
preventing the usage of optional Headers, dynamic mapping of claims to
payloads, changes to how many payloads are included, and the ordering of
the payloads.</t>
</section>

<section anchor="selective-disclosure"><name>Selective Disclosure</name>
<t>While JWPs provide the underling structure for easily supporting
selective disclosure, JPTs and CPTs must go a step further to ensure
that holders can effectively provide choice and consent on exactly what
is being disclosed.  Software using JWPs or CPTs MUST know the mappings
from payloads to claims.  All disclosed payloads MUST be mapped to
claims and made accessible to the application.  Holders SHOULD
understand the semantics of all potentially disclosed claims to the
extent needed to decide whether to disclose them.  JPTs and CPTs SHOULD
NOT contain claims that are intended only for a specific verifier.</t>
</section>

<section anchor="familiarity"><name>Familiarity</name>
<t>JPTs are intended to be as close to a JWT as possible in order to
provide the simplest transition for any JWT-based system to add support
for JPTs.  The same is true for CPTs and CWTs.</t>
<t>Although there are some stark differences in the lifecycle of a JPT,
from the application's perspective, the interface to a JPT can be made
fairly similar: a JSON object containing a mix of required and optional
claims with well-understood values.  Likewise, A CPT is a CBOR object
containing a mix of required and optional claims with well-understood
values.</t>
<t>The most significant divergence required by JPTs and CPTs is that of
supporting values that may be disclosed or may instead only be a proof
about the value.  Applications are required to interact with the JPT or
CPT on a payload-by-payload basis instead of just verifying a JWT or CWT
and then being able to interact with the JSON or CBOR body directly.</t>
</section>

<section anchor="proofs"><name>Proofs</name>
<t>To generate a variety of efficient ZKPs of knowledge, range, membership,
or other predicates, it is essential that each individual payload is
only a single claim value.  This greatly simplifies the task of linking
a derived proof of a given claim to the specific payload that was also
signed by the issuer.  While JPTs and CPTs support claims that have
complex object or array compound values, they also allow for simple
claim values such as strings, numbers, and booleans that can be used
directly in generating predicate proofs.</t>
</section>
</section>

<section anchor="claim-names"><name>Claim Names</name>
<t>It is RECOMMENDED that the claim names used with JPTs come from those in
the IANA JSON Web Token Claims Registry <xref target="IANA.JWT"/> established by
<xref target="RFC7519"/>, when those fit the application's needs.  Likewise, it is
RECOMMENDED that the claim names used with CPTs come from those in the
IANA CBOR Web Token Claims Registry <xref target="IANA.CWT"/> established by
<xref target="RFC8392"/>, when those fit the application's needs.</t>
</section>

<section anchor="claimsDef"><name>Claims Header Parameter</name>
<t>A JSON Proof Token or CBOR Proof Token assigns each payload a claim
name.  Payloads MUST each have a negotiated and understood claim name
within the application context.  The simplest solution to establish
payload claim names is as an ordered array that aligns with the ordering
of payload slots.  This claims array can be conveniently included in the
Claims Header Parameter.</t>
<t>The <tt>claims</tt> Header Parameter is an array listing the Claim Names
corresponding to the JWP payload slots, in the same order as the payload
slots.  Each array value is a Claim Name, as defined in <xref target="RFC7519"/> or
<xref target="RFC8392"/>.  Use of this Header Parameter is OPTIONAL.</t>
<t>All JPT payloads that are claim values MUST be the base64url encoding of
the UTF-8 representation of a JSON value.  That said, predicate proofs
derived from payload values are not represented as claims; they are
contained in the presentation proof using algorithm-specific
representations.</t>
<t>All CPT payloads that are claim values MUST be a CBOR value.  Likewise,
CPT predicate proofs derived from payload values are not represented as
claims; they are contained in the presentation proof using
algorithm-specific representations.</t>
<t>The following is an example Issuer Header that includes a
claims property:</t>

<sourcecode type="json"><![CDATA[{
  "alg": "BBS",
  "claims": [
    "iat",
    "exp",
    "family_name",
    "given_name",
    "email",
    "address",
    "age_over_21"
  ],
  "kid": "HjfcpyjuZQ-O8Ye2hQnNbT9RbbnrobptdnExR0DUjU8"
}
]]>
</sourcecode>
<t>In this example, the "iat" and "exp" would be JSON-formatted numbers,
"family_name", "given_name" and "email" would be JSON strings (in
quotes), "address" would be a JSON object, and "age_over_21" would be
either <tt>true</tt> or <tt>false</tt>.</t>
</section>

<section anchor="cidDef"><name>Claims ID ("cid") Header Parameter</name>
<t>A Claims ID ("cid") value can be used as an identifier for a set of
claim names without explicitly listing them.  Its use is similar to the
Key ID ("kid") Header Parameter.</t>
<t>The structure of the <tt>cid</tt> value is unspecified.  For JPTs, its value
MUST be a case-sensitive string.  For CPTs, its value MUST be a binary
string.  Use of this Header Parameter is OPTIONAL.</t>
<t>The <tt>cid</tt> can be used similarly to a <tt>kid</tt> in order to ensure that it is
possible to externally resolve and then verify that the correct list of
claim names is being used when processing the payloads containing the
claim values.</t>
<t>If there is an associated JWK containing the signing key information,
the <tt>claims</tt> key is also registered there as a convenient location for
the claim names.  Likewise, if there is an associated COSE_Key
containing the signing key information, the <tt>claims</tt> key is also
registered there as a convenient location for the claim names.</t>
<t>When the claims array is transferred as a property in the Issuer Header,
any variations of that array between JWP will be visible to the
verifier, and can leak information about the subject or provide an
additional vector for linkability.  Given the privacy design
considerations around linkability, it is RECOMMENDED that the claims are
defined externally to an individual JPT or CPT and either referenced or
known by the application context.</t>
<t>The following is an example Header that includes a <tt>cid</tt>:</t>

<sourcecode type="json"><![CDATA[{
  "alg": "BBS",
  "cid": "guA8PAI14Gkn4273f1rR606yMbRMFg4y",
  "kid": "HjfcpyjuZQ-O8Ye2hQnNbT9RbbnrobptdnExR0DUjU8"
}
]]>
</sourcecode>
</section>

<section anchor="presented-claims-and-proofs"><name>Presented Claims and Proofs</name>
<t>Each claim in the issued form of the JPT or CPT results in one of three
things in the presented form of the JPT or CPT:</t>

<ol spacing="compact">
<li>A disclosed JSON or CBOR value.</li>
<li>An indicator that the value was not disclosed.</li>
<li>An algorithm-specific proof method.</li>
</ol>

<section anchor="disclosed"><name>Disclosed</name>
<t>A disclosed payload of a JPT is represented as a UTF8-encoded octet
string representing a valid JSON value.  A disclosed payload of a CPT is
represented as a CBOR value.</t>
</section>

<section anchor="undisclosed"><name>Undisclosed</name>
<t>The placeholder indicating that a payload was not disclosed is
represented as described in <xref target="I-D.ietf-jose-json-web-proof" sectionFormat="bare" section="Section 6"/>
(Serializations).</t>
</section>
</section>

<section anchor="example-jpt-and-cpt"><name>Example JPT and CPT</name>
<t>See the examples in <xref target="I-D.ietf-jose-json-proof-algorithms" sectionFormat="of" section="A.1"/>.</t>
</section>

<section anchor="security"><name>Security Considerations</name>

<ul spacing="compact">
<li>Header Minimization</li>
</ul>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="HdrReg"><name>JSON Web Proof Header Parameters Registration</name>
<t>This section registers the following Header Parameter in the IANA
"JSON Web Proof Header Parameters" registry established by
<xref target="I-D.ietf-jose-json-web-proof"/>.</t>

<section anchor="HdrContents"><name>Registry Contents</name>

<section anchor="claims-claims-header-parameter"><name>"claims" (Claims) Header Parameter</name>

<ul spacing="compact">
<li>Header Parameter Name: Claims</li>
<li>Header Parameter JSON Label: <tt>claims</tt></li>
<li>Header Parameter CBOR Label: 10</li>
<li>Header Parameter Usage Location(s): Issued</li>
<li>Change Controller: IETF</li>
<li>Specification Document(s): <xref target="claimsDef"/> of this specification</li>
</ul>
</section>

<section anchor="cid-claims-id-header-parameter"><name>"cid" (Claims ID) Header Parameter</name>

<ul spacing="compact">
<li>Header Parameter Name: Claims ID</li>
<li>Header Parameter JSON Label: <tt>cid</tt></li>
<li>Header Parameter CBOR Label: 11</li>
<li>Header Parameter Usage Location(s): Issued</li>
<li>Change Controller: IETF</li>
<li>Specification Document(s): <xref target="cidDef"/> of this specification</li>
</ul>
</section>
</section>
</section>

<section anchor="JWKParamReg"><name>JSON Web Key Parameters Registry</name>
<t>This section registers the following JWK parameter in the IANA "JSON Web
Key Parameters" registry <xref target="IANA.JOSE"/> established by <xref target="RFC7517"/>.</t>

<section anchor="JWKParamContents"><name>Registry Contents</name>

<ul spacing="compact">
<li>Parameter Name: claims</li>
<li>Parameter Description: Array of claim names</li>
<li>Used with "kty" Value(s): *</li>
<li>Parameter Information Class: Public</li>
<li>Change Controller: IESG</li>
<li>Specification Document(s): <xref target="cidDef"/> of this specification</li>
</ul>
</section>
</section>

<section anchor="COSEKeyParamReg"><name>COSE Key Common Parameters Registry</name>
<t>This section registers the following COSE_Key parameter in the IANA
"COSE Key Common Parameters" registry <xref target="IANA.COSE"/> established by
<xref target="RFC8152"/>.</t>

<section anchor="COSEKeyParamContents"><name>Registry Contents</name>

<ul spacing="compact">
<li>Name: claims</li>
<li>Label: TBD (requested assignment 6)</li>
<li>CBOR Type: array</li>
<li>Value Registry: CBOR Web Token Claims</li>
<li>Description: Array of claim names</li>
<li>Reference: <xref target="cidDef"/> of this specification</li>
</ul>
</section>
</section>

<section anchor="media-types-registry"><name>Media Types Registry</name>
<t>This section registers the following media type <xref target="RFC2046"/> in the IANA
"Media Types" registry <xref target="IANA.MediaTypes"/> in the manner
described in <xref target="RFC6838"/>.</t>

<section anchor="jpt_media_type"><name>application/jpt</name>
<t>The media type for a JSON Proof Token (JPT) is <tt>application/jpt</tt>.</t>

<ul spacing="compact">
<li>Type name: application</li>
<li>Subtype name: jpt</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: 8bit; JPT values are encoded as a series of
base64url-encoded values (some of which may be the empty string)
separated by period ('.') characters.</li>
<li>Security considerations: See <xref target="security"/> of this specification</li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: This specification</li>
<li>Applications that use this media type: Applications releasing claims
with zero-knowledge proofs</li>
<li><t>Additional information:</t>

<ul spacing="compact">
<li>Magic number(s): n/a</li>
<li>File extension(s): n/a</li>
<li>Macintosh file type code(s): n/a</li>
</ul></li>
<li>Person &amp; email address to contact for further information:
Michael B. Jones, michael_b_jones@hotmail.com</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Michael B. Jones, michael_b_jones@hotmail.com</li>
<li>Change controller: IETF</li>
<li>Provisional registration: No</li>
</ul>
</section>

<section anchor="cpt_media_type"><name>application/cpt</name>
<t>The media type for a CBOR Proof Token (CPT) is <tt>application/cpt</tt>.</t>

<ul spacing="compact">
<li>Type name: application</li>
<li>Subtype name: cpt</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: 8bit; CPT values are encoded as CBOR</li>
<li>Security considerations: See <xref target="security"/> of this specification</li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: This specification</li>
<li>Applications that use this media type: Applications releasing claims
with zero-knowledge proofs</li>
<li><t>Additional information:</t>

<ul spacing="compact">
<li>Magic number(s): n/a</li>
<li>File extension(s): n/a</li>
<li>Macintosh file type code(s): n/a</li>
</ul></li>
<li>Person &amp; email address to contact for further information:
Michael B. Jones, michael_b_jones@hotmail.com</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Michael B. Jones, michael_b_jones@hotmail.com</li>
<li>Change controller: IETF</li>
<li>Provisional registration: No</li>
</ul>
</section>
</section>

<section anchor="structured-syntax-suffix-registry"><name>Structured Syntax Suffix Registry</name>
<t>This section registers the following entries in the IANA "Structured
Syntax Suffix" registry [IANA.StructuredSuffix] in the manner described
in <xref target="RFC6838"/>.</t>

<section anchor="jpt"><name>+jpt</name>

<ul spacing="compact">
<li>Name: JSON Proof Token (JPT)</li>
<li>+suffix: +jpt</li>
<li>References: This specification</li>
<li>Encoding considerations: 8bit; JPT values are encoded as a series of
base64url-encoded values (some of which may be the empty string)
separated by period ('.') characters.</li>
<li>Interoperability considerations: n/a</li>
<li>Fragment identifier considerations: n/a</li>
<li>Security considerations: See <xref target="security"/> of this specification</li>
<li>Contact: Michael B. Jones, michael_b_jones@hotmail.com</li>
<li>Author/Change controller: IETF</li>
</ul>
</section>

<section anchor="cpt"><name>+cpt</name>

<ul spacing="compact">
<li>Name: CBOR Proof Token (CPT)</li>
<li>+suffix: +cpt</li>
<li>References: This specification</li>
<li>Encoding considerations: 8bit; CPT values are encoded as CBOR</li>
<li>Interoperability considerations: n/a</li>
<li>Fragment identifier considerations: n/a</li>
<li>Security considerations: See <xref target="security"/> of this specification</li>
<li>Contact: Michael B. Jones, michael_b_jones@hotmail.com</li>
<li>Author/Change controller: IETF</li>
</ul>
</section>
</section>

<section anchor="coap-content-formats-registry"><name>CoAP Content-Formats Registry</name>
<t>This section registers the following CoAP Content-Formats value in the
<xref target="IANA.CoAP.Formats"/> registry.</t>

<section anchor="cpt-coap-content-format"><name>"CPT" CoAP Content-Format</name>
<t>The CoAP Content-Format for a CBOR Proof Token (CPT) is as follows.</t>

<ul spacing="compact">
<li>Content Type: application/cpt</li>
<li>ID: TBD (requested assignment 20)</li>
<li>Reference: <xref target="cpt_media_type"/> of this specification</li>
</ul>
</section>
</section>
</section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<reference anchor="I-D.ietf-jose-json-web-proof" target="https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-proof">
  <front>
    <title>JSON Web Proof</title>
    <author fullname="David Waite" initials="D." surname="Waite">
      <organization>Ping Identity</organization>
    </author>
    <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
      <organization>Self-Issued Consulting</organization>
    </author>
    <author fullname="Jeremie Miller" initials="J." surname="Miller">
      <organization>Ping Identity</organization>
    </author>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-jose-json-web-proof-latest"/>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml"/>
</references>
<references><name>Informative References</name>
<reference anchor="I-D.ietf-jose-json-proof-algorithms" target="https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-proof-algorithms">
  <front>
    <title>JSON Proof Algorithms</title>
    <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
      <organization>Self-Issued Consulting</organization>
    </author>
    <author fullname="David Waite" initials="D." surname="Waite">
      <organization>Ping Identity</organization>
    </author>
    <author fullname="Jeremie Miller" initials="J." surname="Miller">
      <organization>Ping Identity</organization>
    </author>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-jose-json-proof-algorithms-latest"/>
</reference>
<reference anchor="IANA.COSE" target="https://www.iana.org/assignments/cose">
  <front>
    <title>CBOR Object Signing and Encryption</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="IANA.CWT" target="https://www.iana.org/assignments/cwt">
  <front>
    <title>CBOR Web Token</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="IANA.CoAP.Formats" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#content-formats">
  <front>
    <title>CoAP Content-Formats</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="IANA.JOSE" target="https://www.iana.org/assignments/jose">
  <front>
    <title>JSON Object Signing and Encryption</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="IANA.JWT" target="https://www.iana.org/assignments/jwt">
  <front>
    <title>JSON Web Token</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="IANA.MediaTypes" target="https://www.iana.org/assignments/media-types">
  <front>
    <title>Media Types</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7517.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8152.xml"/>
</references>
</references>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>This work was incubated in the DIF <eref target="https://identity.foundation/working-groups/crypto.html">Applied Cryptography Working
Group</eref>.</t>
<t>We would like to thank
Brent Zundel
for his valuable contributions to this specification.</t>
</section>

<section anchor="document-history"><name>Document History</name>
<t>[[ To be removed from the final specification ]]</t>
<t>-13</t>

<ul spacing="compact">
<li>Examples are now built deterministically (using RFC 6979 deterministic
ECDSA and seeded random number generation for BBS)</li>
</ul>
<t>-12</t>

<ul spacing="compact">
<li>IANA Considerations section changes from IANA Early Review</li>
</ul>
<t>-11</t>

<ul spacing="compact">
<li>Change Issuer Protected Header to Protected Header</li>
<li>Remove JWP qualifiers on Header and Protected Header</li>
</ul>
<t>-10</t>

<ul spacing="compact">
<li>Registered <tt>+jpt</tt> and <tt>+cpt</tt> structured syntax suffixes.</li>
<li>Clarify mapping of the <tt>claims</tt> array to payload data using "payload
slot" nomenclature</li>
<li>Move proof methods text to JWP.</li>
</ul>
<t>-09</t>

<ul spacing="compact">
<li>No changes</li>
</ul>
<t>-08</t>

<ul spacing="compact">
<li>Defined CBOR Proof Token (CPT).</li>
<li>Registered application/jpt and application/cpt media types and CPT
CoAP Content-Format.</li>
<li>Made some additional references normative.</li>
</ul>
<t>-07</t>

<ul spacing="compact">
<li>Changing primary editor</li>
<li>Move <tt>claims</tt> definition from JWP, to live beside <tt>cid</tt></li>
<li>Update <tt>cid</tt> registry entry to assign CBOR label</li>
</ul>
<t>-06</t>

<ul spacing="compact">
<li>Update reference to new repository home</li>
<li>Fixed #99: Discussed issued and presented forms of JPTs.</li>
</ul>
<t>-05</t>

<ul spacing="compact">
<li>Define and register Claims ID JWP Header Parameter.</li>
</ul>
<t>-04</t>

<ul spacing="compact">
<li>Refactoring figures and examples to be built from a common set across
all three documents</li>
</ul>
<t>-03</t>

<ul spacing="compact">
<li>Improvements resulting from a full proofreading.</li>
<li>Added examples of JSON object and JSON boolean claims.</li>
</ul>
<t>-02</t>

<ul spacing="compact">
<li>Update example to use the current BBS algorithm</li>
</ul>
<t>-01</t>

<ul spacing="compact">
<li>Correct cross-references within group.</li>
</ul>
<t>-00</t>

<ul spacing="compact">
<li>Created initial working group draft based on
draft-jmiller-jose-json-proof-token-01</li>
</ul>
</section>

</back>

</rfc>
