<?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-oauth-sd-jwt-vc-06" submissionType="IETF" category="std" xml:lang="en" indexInclude="true">

<front>
<title abbrev="SD-JWT VC">SD-JWT-based Verifiable Credentials (SD-JWT VC)</title><seriesInfo value="draft-ietf-oauth-sd-jwt-vc-06" stream="IETF" status="standard" name="Internet-Draft"/>
<author initials="O." surname="Terbu" fullname="Oliver Terbu"><organization>MATTR</organization><address><postal><street/>
</postal><email>oliver.terbu@mattr.global</email>
</address></author><author initials="D." surname="Fett" fullname="Daniel Fett"><organization>Authlete Inc.</organization><address><postal><street/>
</postal><email>mail@danielfett.de</email>
</address></author><author initials="B." surname="Campbell" fullname="Brian Campbell"><organization>Ping Identity</organization><address><postal><street/>
</postal><email>bcampbell@pingidentity.com</email>
</address></author><date/>
<area>Security</area>
<workgroup>Web Authorization Protocol</workgroup>
<keyword>security</keyword>
<keyword>oauth2</keyword>
<keyword>sd-jwt</keyword>

<abstract>
<t>This specification describes data formats as well as validation and processing
rules to express Verifiable Credentials with JSON payloads with and without selective disclosure based on the SD-JWT <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> format.</t>
</abstract>

<note title="Discussion Venues" removeInRFC="true">
<t>Discussion of this document takes place on the
    Web Authorization Protocol Working Group mailing list (oauth@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.</t>
<t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/oauth-wg/oauth-sd-jwt-vc"/>.</t>
</note>
</front>

<middle>

<section anchor="introduction"><name>Introduction</name>

<section anchor="issuer-holder-verifier-model"><name>Issuer-Holder-Verifier Model</name>
<t>In the so-called Issuer-Holder-Verifier Model, Issuers issue so-called Verifiable Credentials to a
Holder, who can then present the Verifiable Credentials to Verifiers. Verifiable
Credentials are cryptographically secured statements about a Subject, typically the Holder.</t>
<figure><name>Issuer-Holder-Verifier Model with optional Status Provider
</name>
<sourcecode type="ascii-art"><![CDATA[         +------------+
         |            |
         |   Issuer   |
         |            |
         +------------+
               |
    Issues Verifiable Credential
               |
               v
         +------------+
         |            |
         |   Holder   |
         |            |
         +------------+
               |
  Presents Verifiable Credential
               |
               v
         +-------------+
         |             |+                          +------------+
         |  Verifiers  ||+                         |   Status   |
         |             |||----- optionally ------->|  Provider  |
         +-------------+||   retrieve status of    |            |
          +-------------+|  Verifiable Credential  +------------+
           +-------------+
]]>
</sourcecode>
</figure>
<t>Verifiers can check the authenticity of the data in the Verifiable Credentials
and optionally enforce Key Binding, i.e., ask the Holder to prove that they
are the intended holder of the Verifiable Credential, for example, by proving possession of a
cryptographic key referenced in the credential. This process is further
described in <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>.</t>
<t>To support revocation of Verifiable Credentials, revocation information can
optionally be retrieved from a Status Provider. The role of a Status Provider
can be fulfilled by either a fourth party or by the Issuer.</t>
</section>

<section anchor="sd-jwt-as-a-credential-format"><name>SD-JWT as a Credential Format</name>
<t>JSON Web Tokens (JWTs) <xref target="RFC7519"/> can in principle be used to express
Verifiable Credentials in a way that is easy to understand and process as it
builds upon established web primitives.</t>
<t>Selective Disclosure JWT (SD-JWT) <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> is
a specification that introduces conventions to support selective disclosure for
JWTs: For an SD-JWT document, a Holder can decide which claims to release (within
bounds defined by the Issuer).</t>
<t>SD-JWT is a superset of JWT as it can also be used when there are no selectively
disclosable claims and also supports JWS JSON serialization, which is useful for
long term archiving and multi signatures. However, SD-JWT itself does not define
the claims that must be used within the payload or their semantics.</t>
<t>This specification uses SD-JWT and the well-established JWT content rules and
extensibility model as basis for representing Verifiable Credentials with JSON
payloads. These Verifiable Credentials are called SD-JWT VCs. The use of
selective disclosure in SD-JWT VCs is OPTIONAL.</t>
<t>SD-JWTs VC can contain claims that are registered in "JSON Web Token Claims"
registry as defined in <xref target="RFC7519"/>, as well as public and
private claims.</t>
<t>Note: This specification does not utilize the W3C's Verifiable Credentials Data Model v1.0, v1.1, or v2.0.</t>
</section>

<section anchor="requirements-notation-and-conventions"><name>Requirements Notation and Conventions</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 RFC 2119 <xref target="RFC2119"/>.</t>
</section>

<section anchor="terms-and-definitions"><name>Terms and Definitions</name>
<t>This specification uses the terms "Holder", "Issuer", "Verifier", "Key Binding", and "Key Binding JWT" defined by
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>.</t>

<dl spacing="compact">
<dt>Consumer:</dt>
<dd>Applications using the Type Metadata specified in <xref target="type-metadata"/> are called Consumer. This typically includes Issuers, Verifiers, and Wallets.</dd>
<dt>Verifiable Credential (VC):</dt>
<dd>An assertion with claims about a Subject that is cryptographically secured by an Issuer (usually by a digital signature).</dd>
<dt>SD-JWT-based Verifiable Credential (SD-JWT VC):</dt>
<dd>A Verifiable Credential encoded using the format defined in
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>. It may or may not contain
selectively disclosable claims.</dd>
<dt>Unsecured Payload of an SD-JWT VC:</dt>
<dd>A JSON object containing all selectively disclosable and non-selectively disclosable claims
of the SD-JWT VC. The Unsecured Payload acts as the input JSON object to issue
an SD-JWT VC complying to this specification.</dd>
<dt>Status Provider:</dt>
<dd>An entity that provides status information (e.g. revocation) about a Verifiable Credential.</dd>
</dl>
</section>
</section>

<section anchor="scope"><name>Scope</name>

<ul spacing="compact">
<li><t>This specification defines</t>

<ul spacing="compact">
<li>Data model and media types for Verifiable Credentials based on SD-JWTs.</li>
<li>Validation and processing rules for Verifiers and Holders.</li>
</ul></li>
</ul>
</section>

<section anchor="verifiable-credentials-based-on-sd-jwt"><name>Verifiable Credentials based on SD-JWT</name>
<t>This section defines encoding, validation and processing rules for SD-JWT VCs.</t>

<section anchor="media-type"><name>Media Type</name>
<t>SD-JWT VCs compliant with this specification MUST use the media type
<tt>application/dc+sd-jwt</tt> as defined in <xref target="media-type"/>.</t>
<t>The base subtype name <tt>dc</tt> is meant to stand for "digital credential", which is
a term that is emerging as a conceptual synonym for "verifiable credential".</t>
</section>

<section anchor="data-format"><name>Data Format</name>
<t>SD-JWT VCs MUST be encoded using the SD-JWT format defined in Section 5 of
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>. A presentation of an SD-JWT VC MAY
contain a Key Binding JWT.</t>
<t>Note that in some cases, an SD-JWT VC MAY have no selectively disclosable
claims, and therefore the encoded SD-JWT will not contain any Disclosures.</t>

<section anchor="jose-header"><name>JOSE Header</name>
<t>This section defines JWT header parameters for the SD-JWT component of the
SD-JWT VC.</t>
<t>The <tt>typ</tt> header parameter of the SD-JWT MUST be present. The <tt>typ</tt> value MUST
use <tt>dc+sd-jwt</tt>. This indicates that the payload of the SD-JWT contains plain
JSON and follows the rules as defined in this specification. It further
indicates that the SD-JWT is a SD-JWT component of a SD-JWT VC.</t>
<t>The following is a non-normative example of a decoded SD-JWT header:</t>

<artwork><![CDATA[{
  "alg": "ES256",
  "typ": "dc+sd-jwt"
}
]]>
</artwork>
<t>Note that this draft used <tt>vc+sd-jwt</tt> as the value of the <tt>typ</tt> header from its inception in July 2023 until November 2024 when it was changed to <tt>dc+sd-jwt</tt> to avoid conflict with the <tt>vc</tt> media type name registered by the W3C's Verifiable Credentials Data Model draft. In order to facilitate a minimally disruptive transition, it is RECOMMENDED that Verifiers and Holders accept both <tt>vc+sd-jwt</tt> and <tt>dc+sd-jwt</tt> as the value of the <tt>typ</tt> header for a reasonable transitional period.</t>
</section>

<section anchor="jwt-claims-set"><name>JWT Claims Set</name>
<t>This section defines the claims that can be included in the payload of
SD-JWT VCs.</t>

<section anchor="new-jwt-claims"><name>New JWT Claims</name>

<section anchor="type-claim"><name>Verifiable Credential Type - <tt>vct</tt> Claim</name>
<t>This specification defines the JWT claim <tt>vct</tt> (for verifiable credential type). The <tt>vct</tt> value MUST be a
case-sensitive <tt>StringOrURI</tt> (see <xref target="RFC7519"/>) value serving as an identifier
for the type of the SD-JWT VC. The <tt>vct</tt> value MUST be a Collision-Resistant
Name as defined in Section 2 of <xref target="RFC7515"/>.</t>
<t>A type is associated with rules defining which claims may or must appear in the
Unsecured Payload of the SD-JWT VC and whether they may, must, or must not be
selectively disclosable. This specification does not define any <tt>vct</tt> values; instead
it is expected that ecosystems using SD-JWT VCs define such values including
the semantics of the respective claims and associated rules (e.g., policies for issuing and
validating credentials beyond what is defined in this specification).</t>
<t>The following is a non-normative example of how <tt>vct</tt> is used to express
a type:</t>

<artwork><![CDATA[{
  "vct": "https://credentials.example.com/identity_credential"
}
]]>
</artwork>
<t>For example, a value of <tt>https://credentials.example.com/identity_credential</tt> can be associated with rules that define that at least the registered JWT claims <tt>given_name</tt>, <tt>family_name</tt>, <tt>birthdate</tt>, and <tt>address</tt> must appear in the Unsecured Payload. Additionally, the registered JWT claims <tt>email</tt> and <tt>phone_number</tt>, and the private claims <tt>is_over_18</tt>, <tt>is_over_21</tt>, and <tt>is_over_65</tt> may be used. The type might also indicate that any of the aforementioned claims can be selectively disclosable.</t>
</section>
</section>

<section anchor="claims"><name>Registered JWT Claims</name>
<t>SD-JWT VCs MAY use any claim registered in the "JSON Web Token Claims"
registry as defined in <xref target="RFC7519"/>.</t>
<t>If present, the following registered JWT claims MUST be included in the SD-JWT
and MUST NOT be included in the Disclosures, i.e. cannot be selectively
disclosed:</t>

<ul spacing="compact">
<li><t><tt>iss</tt></t>

<ul spacing="compact">
<li>REQUIRED. The Issuer of the Verifiable Credential. The value of <tt>iss</tt>
MUST be a URI. See <xref target="RFC7519"/> for more information.</li>
</ul></li>
<li><t><tt>nbf</tt></t>

<ul spacing="compact">
<li>OPTIONAL. The time before which the Verifiable Credential MUST NOT be
accepted before validating. See <xref target="RFC7519"/> for more information.</li>
</ul></li>
<li><t><tt>exp</tt></t>

<ul spacing="compact">
<li>OPTIONAL. The expiry time of the Verifiable Credential after which the
Verifiable Credential is no longer valid. See <xref target="RFC7519"/> for more
information.</li>
</ul></li>
<li><t><tt>cnf</tt></t>

<ul spacing="compact">
<li>OPTIONAL unless cryptographic Key Binding is to be supported, in which case it is REQUIRED. Contains the confirmation method identifying the proof of possession key as defined in <xref target="RFC7800"/>. It is RECOMMENDED that this contains a JWK as defined in Section 3.2 of <xref target="RFC7800"/>. For proof of cryptographic Key Binding, the Key Binding JWT in the presentation of the SD-JWT MUST be secured by the key identified in this claim.</li>
</ul></li>
<li><t><tt>vct</tt></t>

<ul spacing="compact">
<li>REQUIRED. The type of the Verifiable Credential, e.g.,
<tt>https://credentials.example.com/identity_credential</tt>, as defined in <xref target="type-claim"/>.</li>
</ul></li>
<li><t><tt>status</tt></t>

<ul spacing="compact">
<li>OPTIONAL. The information on how to read the status of the Verifiable
Credential. See <xref target="I-D.ietf-oauth-status-list"/>
for more information.</li>
</ul></li>
</ul>
<t>The following registered JWT claims MAY be contained in the SD-JWT or in the
Disclosures and MAY be selectively disclosed:</t>

<ul spacing="compact">
<li><t><tt>sub</tt></t>

<ul spacing="compact">
<li>OPTIONAL. The identifier of the Subject of the Verifiable Credential.
The Issuer MAY use it to provide the Subject
identifier known by the Issuer. There is no requirement for a binding to
exist between <tt>sub</tt> and <tt>cnf</tt> claims.</li>
</ul></li>
<li><t><tt>iat</tt></t>

<ul spacing="compact">
<li>OPTIONAL. The time of issuance of the Verifiable Credential. See
<xref target="RFC7519"/> for more information.</li>
</ul></li>
</ul>
</section>

<section anchor="public-jwt-claims"><name>Public JWT claims</name>
<t>Additional public claims MAY be used in SD-JWT VCs depending on the
application.</t>
</section>

<section anchor="sd-jwt-vc-without-selectively-disclosable-claims"><name>SD-JWT VC without Selectively Disclosable Claims</name>
<t>An SD-JWT VC MAY have no selectively disclosable claims.
In that case, the SD-JWT VC MUST NOT contain the <tt>_sd</tt> claim in the JWT body. It also
MUST NOT have any Disclosures.</t>
</section>
</section>
</section>

<section anchor="vc-sd-jwt-example"><name>Example</name>
<t>The following is a non-normative example of the user data of an unsecured payload of an
SD-JWT VC.</t>

<sourcecode type="json"><![CDATA[{
  "vct": "https://credentials.example.com/identity_credential",
  "given_name": "John",
  "family_name": "Doe",
  "email": "johndoe@example.com",
  "phone_number": "+1-202-555-0101",
  "address": {
    "street_address": "123 Main St",
    "locality": "Anytown",
    "region": "Anystate",
    "country": "US"
  },
  "birthdate": "1940-01-01",
  "is_over_18": true,
  "is_over_21": true,
  "is_over_65": true
}
]]>
</sourcecode>
<t>The following is a non-normative example of how the unsecured payload of the
SD-JWT VC above can be used in an SD-JWT where the resulting SD-JWT VC contains
only claims about the Subject that are selectively disclosable:</t>

<sourcecode type="json"><![CDATA[{
  "_sd": [
    "09vKrJMOlyTWM0sjpu_pdOBVBQ2M1y3KhpH515nXkpY",
    "2rsjGbaC0ky8mT0pJrPioWTq0_daw1sX76poUlgCwbI",
    "EkO8dhW0dHEJbvUHlE_VCeuC9uRELOieLZhh7XbUTtA",
    "IlDzIKeiZdDwpqpK6ZfbyphFvz5FgnWa-sN6wqQXCiw",
    "JzYjH4svliH0R3PyEMfeZu6Jt69u5qehZo7F7EPYlSE",
    "PorFbpKuVu6xymJagvkFsFXAbRoc2JGlAUA2BA4o7cI",
    "TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo",
    "jdrTE8YcbY4EifugihiAe_BPekxJQZICeiUQwY9QqxI",
    "jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4"
  ],
  "iss": "https://example.com/issuer",
  "iat": 1683000000,
  "exp": 1883000000,
  "vct": "https://credentials.example.com/identity_credential",
  "_sd_alg": "sha-256",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
]]>
</sourcecode>
<t>Note that a <tt>cnf</tt> claim has been added to the SD-JWT payload to express the
confirmation method of the Key Binding.</t>
<t>The following are the Disclosures belonging to the SD-JWT payload above:</t>
<t><strong>Claim <tt>given_name</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9o</tt><br/>
<tt>biJd</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "given_name", "John"]</tt></li>
</ul>
<t><strong>Claim <tt>family_name</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIkRv</tt><br/>
<tt>ZSJd</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "family_name", "Doe"]</tt></li>
</ul>
<t><strong>Claim <tt>email</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>JzYjH4svliH0R3PyEMfeZu6Jt69u5qehZo7F7EPYlSE</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VA</tt><br/>
<tt>ZXhhbXBsZS5jb20iXQ</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "email", "johndoe@example.com"]</tt></li>
</ul>
<t><strong>Claim <tt>phone_number</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>PorFbpKuVu6xymJagvkFsFXAbRoc2JGlAUA2BA4o7cI</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInBob25lX251bWJlciIsICIr</tt><br/>
<tt>MS0yMDItNTU1LTAxMDEiXQ</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "phone_number",</tt><br/>
<tt>"+1-202-555-0101"]</tt></li>
</ul>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>IlDzIKeiZdDwpqpK6ZfbyphFvz5FgnWa-sN6wqQXCiw</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImFkZHJlc3MiLCB7InN0cmVl</tt><br/>
<tt>dF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRv</tt><br/>
<tt>d24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "address", {"street_address":</tt><br/>
<tt>"123 Main St", "locality": "Anytown", "region": "Anystate",</tt><br/>
<tt>"country": "US"}]</tt></li>
</ul>
<t><strong>Claim <tt>birthdate</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>jdrTE8YcbY4EifugihiAe_BPekxJQZICeiUQwY9QqxI</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImJpcnRoZGF0ZSIsICIxOTQw</tt><br/>
<tt>LTAxLTAxIl0</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "birthdate", "1940-01-01"]</tt></li>
</ul>
<t><strong>Claim <tt>is_over_18</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>09vKrJMOlyTWM0sjpu_pdOBVBQ2M1y3KhpH515nXkpY</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImlzX292ZXJfMTgiLCB0cnVl</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", "is_over_18", true]</tt></li>
</ul>
<t><strong>Claim <tt>is_over_21</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>2rsjGbaC0ky8mT0pJrPioWTq0_daw1sX76poUlgCwbI</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMjEiLCB0cnVl</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "is_over_21", true]</tt></li>
</ul>
<t><strong>Claim <tt>is_over_65</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>EkO8dhW0dHEJbvUHlE_VCeuC9uRELOieLZhh7XbUTtA</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfNjUiLCB0cnVl</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "is_over_65", true]</tt></li>
</ul>
<t>The SD-JWT and the Disclosures would then be serialized by the Issuer into the following format for issuance to the Holder:</t>

<sourcecode type="txt"><![CDATA[eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImRjK3NkLWp3dCIsICJraWQiOiAiZG9jLXNp
Z25lci0wNS0yNS0yMDIyIn0.eyJfc2QiOiBbIjA5dktySk1PbHlUV00wc2pwdV9wZE9C
VkJRMk0xeTNLaHBINTE1blhrcFkiLCAiMnJzakdiYUMwa3k4bVQwcEpyUGlvV1RxMF9k
YXcxc1g3NnBvVWxnQ3diSSIsICJFa084ZGhXMGRIRUpidlVIbEVfVkNldUM5dVJFTE9p
ZUxaaGg3WGJVVHRBIiwgIklsRHpJS2VpWmREd3BxcEs2WmZieXBoRnZ6NUZnbldhLXNO
NndxUVhDaXciLCAiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5dTVxZWhabzdGN0VQ
WWxTRSIsICJQb3JGYnBLdVZ1Nnh5bUphZ3ZrRnNGWEFiUm9jMkpHbEFVQTJCQTRvN2NJ
IiwgIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3JaemZVYW9tTG8iLCAi
amRyVEU4WWNiWTRFaWZ1Z2loaUFlX0JQZWt4SlFaSUNlaVVRd1k5UXF4SSIsICJqc3U5
eVZ1bHdRUWxoRmxNXzNKbHpNYVNGemdsaFFHMERwZmF5UXdMVUs0Il0sICJpc3MiOiAi
aHR0cHM6Ly9leGFtcGxlLmNvbS9pc3N1ZXIiLCAiaWF0IjogMTY4MzAwMDAwMCwgImV4
cCI6IDE4ODMwMDAwMDAsICJ2Y3QiOiAiaHR0cHM6Ly9jcmVkZW50aWFscy5leGFtcGxl
LmNvbS9pZGVudGl0eV9jcmVkZW50aWFsIiwgIl9zZF9hbGciOiAic2hhLTI1NiIsICJj
bmYiOiB7Imp3ayI6IHsia3R5IjogIkVDIiwgImNydiI6ICJQLTI1NiIsICJ4IjogIlRD
QUVSMTladnUzT0hGNGo0VzR2ZlNWb0hJUDFJTGlsRGxzN3ZDZUdlbWMiLCAieSI6ICJa
eGppV1diWk1RR0hWV0tWUTRoYlNJaXJzVmZ1ZWNDRTZ0NGpUOUYySFpRIn19fQ.cWT4V
Ms1G0iqUt-ajx98dCwq0I4djdqC9vX6ELCpjYBNrhRNK6u3wds9cSwB8REuA1RRCE9Bp
rDDyjOVDLgLvg~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLC
AiSm9obiJd~WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgI
kRvZSJd~WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VA
ZXhhbXBsZS5jb20iXQ~WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInBob25lX251b
WJlciIsICIrMS0yMDItNTU1LTAxMDEiXQ~WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIi
wgImFkZHJlc3MiLCB7InN0cmVldF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2
FsaXR5IjogIkFueXRvd24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOi
AiVVMifV0~WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImJpcnRoZGF0ZSIsICIxOT
QwLTAxLTAxIl0~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImlzX292ZXJfMTgiLC
B0cnVlXQ~WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMjEiLCB0cnV
lXQ~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfNjUiLCB0cnVlXQ~
]]>
</sourcecode>
<t>Examples of what presentations of SD-JWT VCs might look like are provided in <xref target="presentation-examples"/>.</t>
</section>

<section anchor="vc-sd-jwt-verification-and-processing"><name>Verification and Processing</name>
<t>The recipient (Holder or Verifier) of an SD-JWT VC MUST process and verify an
SD-JWT VC as described in Section 8 of
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>.</t>
<t>If Key Binding is required (refer to the security considerations in Section 11.6 of <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>), the Verifier MUST verify the Key Binding JWT
according to Section 8 of <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>. To verify
the Key Binding JWT, the <tt>cnf</tt> claim of the SD-JWT MUST be used.</t>
<t>Furthermore, the recipient of the SD-JWT VC MUST validate the public verification key
for the Issuer-signed JWT as defined in <xref target="issuer-signed-jwt-verification-key-validation"/>.</t>
<t>If a schema is provided in the Type Metadata, a recipient MUST validate the schema as defined in <xref target="schema-type-metadata"/>.</t>
<t>If there are no selectively disclosable claims, there is no need to process the
<tt>_sd</tt> claim nor any Disclosures.</t>
<t>If <tt>status</tt> is present in the verified payload of the SD-JWT, the status SHOULD
be checked. It depends on the Verifier policy to reject or accept a presentation
of a SD-JWT VC based on the status of the Verifiable Credential.</t>
<t>Any claims used that are not understood MUST be ignored.</t>
<t>Additional validation rules MAY apply, but their use is out of the scope of this
specification.</t>
</section>

<section anchor="issuer-signed-jwt-verification-key-validation"><name>Issuer-signed JWT Verification Key Validation</name>
<t>A recipient of an SD-JWT VC MUST apply the following rules to validate that the public
verification key for the Issuer-signed JWT corresponds to the <tt>iss</tt> value:</t>

<ul spacing="compact">
<li>JWT VC Issuer Metadata: If a recipient supports JWT VC Issuer Metadata and if the <tt>iss</tt> value contains an HTTPS URI, the recipient MUST
obtain the public key using JWT VC Issuer Metadata as defined in <xref target="jwt-vc-issuer-metadata"/>.</li>
<li><t>X.509 Certificates: If the recipient supports X.509 Certificates and the <tt>iss</tt> value contains an HTTPS URI, the recipient MUST</t>

<ol spacing="compact">
<li>obtain the public key from the end-entity certificate of the certificates from the <tt>x5c</tt> header parameter of the Issuer-signed JWT and validate the X.509 certificate chain accordingly, and</li>
<li>ensure that the <tt>iss</tt> value matches a <tt>uniformResourceIdentifier</tt> SAN entry of the end-entity certificate or that the domain name in the <tt>iss</tt> value matches the <tt>dNSName</tt> SAN entry of the end-entity certificate.</li>
</ol></li>
</ul>
<t>Separate specifications or ecosystem regulations MAY define rules complementing the rules defined above, but such rules are out of scope of this specification. See <xref target="ecosystem-verification-rules"/> for security considerations.</t>
<t>If a recipient cannot validate that the public verification key corresponds to the <tt>iss</tt> value of the Issuer-signed JWT, the SD-JWT VC MUST be rejected.</t>
</section>
</section>

<section anchor="presenting-verifiable-credentials"><name>Presenting Verifiable Credentials</name>
<t>This section defines encoding, validation and processing rules for presentations
of SD-JWT VCs.</t>

<section anchor="key-binding-jwt"><name>Key Binding JWT</name>
<t>If the presentation of the SD-JWT VC includes a Key Binding JWT, the Key Binding
JWT MUST adhere to the rules defined in Section 5.3 of
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>.</t>
<t>The Key Binding JWT MAY include additional claims which, when not understood, MUST
be ignored by the Verifier.</t>
</section>

<section anchor="presentation-examples"><name>Examples</name>
<t>The following is a non-normative example of a presentation of the SD-JWT shown in <xref target="vc-sd-jwt-example"/> including a Key Binding JWT.
In this presentation, the Holder provides only the Disclosures for the <tt>address</tt> and <tt>is_over_65</tt> claims.
Other claims are not disclosed to the Verifier.</t>

<sourcecode type="txt"><![CDATA[eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImRjK3NkLWp3dCIsICJraWQiOiAiZG9jLXNp
Z25lci0wNS0yNS0yMDIyIn0.eyJfc2QiOiBbIjA5dktySk1PbHlUV00wc2pwdV9wZE9C
VkJRMk0xeTNLaHBINTE1blhrcFkiLCAiMnJzakdiYUMwa3k4bVQwcEpyUGlvV1RxMF9k
YXcxc1g3NnBvVWxnQ3diSSIsICJFa084ZGhXMGRIRUpidlVIbEVfVkNldUM5dVJFTE9p
ZUxaaGg3WGJVVHRBIiwgIklsRHpJS2VpWmREd3BxcEs2WmZieXBoRnZ6NUZnbldhLXNO
NndxUVhDaXciLCAiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5dTVxZWhabzdGN0VQ
WWxTRSIsICJQb3JGYnBLdVZ1Nnh5bUphZ3ZrRnNGWEFiUm9jMkpHbEFVQTJCQTRvN2NJ
IiwgIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3JaemZVYW9tTG8iLCAi
amRyVEU4WWNiWTRFaWZ1Z2loaUFlX0JQZWt4SlFaSUNlaVVRd1k5UXF4SSIsICJqc3U5
eVZ1bHdRUWxoRmxNXzNKbHpNYVNGemdsaFFHMERwZmF5UXdMVUs0Il0sICJpc3MiOiAi
aHR0cHM6Ly9leGFtcGxlLmNvbS9pc3N1ZXIiLCAiaWF0IjogMTY4MzAwMDAwMCwgImV4
cCI6IDE4ODMwMDAwMDAsICJ2Y3QiOiAiaHR0cHM6Ly9jcmVkZW50aWFscy5leGFtcGxl
LmNvbS9pZGVudGl0eV9jcmVkZW50aWFsIiwgIl9zZF9hbGciOiAic2hhLTI1NiIsICJj
bmYiOiB7Imp3ayI6IHsia3R5IjogIkVDIiwgImNydiI6ICJQLTI1NiIsICJ4IjogIlRD
QUVSMTladnUzT0hGNGo0VzR2ZlNWb0hJUDFJTGlsRGxzN3ZDZUdlbWMiLCAieSI6ICJa
eGppV1diWk1RR0hWV0tWUTRoYlNJaXJzVmZ1ZWNDRTZ0NGpUOUYySFpRIn19fQ.cWT4V
Ms1G0iqUt-ajx98dCwq0I4djdqC9vX6ELCpjYBNrhRNK6u3wds9cSwB8REuA1RRCE9Bp
rDDyjOVDLgLvg~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfNjUiLC
B0cnVlXQ~WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImFkZHJlc3MiLCB7InN0cmV
ldF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRvd24iLCA
icmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0~eyJhbGciOiAiRVM
yNTYiLCAidHlwIjogImtiK2p3dCJ9.eyJub25jZSI6ICIxMjM0NTY3ODkwIiwgImF1ZC
I6ICJodHRwczovL2V4YW1wbGUuY29tL3ZlcmlmaWVyIiwgImlhdCI6IDE3MzE1MzA3MD
QsICJzZF9oYXNoIjogImNUNkRmMXRCODNxM3EtQVFjdGYxVXFncXBhaW5BOVFSNmVmS3
NQdFBFQ2cifQ.fp4Dgu3k1oU09BHnP7U2aU2v_z96JSi8T1T7f47qUW5ypQsh_39F1S4
EOtnT09YNGp9nZbETjor3nCzM0J0MvQ
]]>
</sourcecode>
<t>After validation, the Verifier will have the following processed SD-JWT payload available for further handling:</t>

<sourcecode type="json"><![CDATA[{
  "iss": "https://example.com/issuer",
  "iat": 1683000000,
  "exp": 1883000000,
  "vct": "https://credentials.example.com/identity_credential",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  },
  "is_over_65": true,
  "address": {
    "street_address": "123 Main St",
    "locality": "Anytown",
    "region": "Anystate",
    "country": "US"
  }
}
]]>
</sourcecode>
<t>The following example shows a presentation of a (similar but different) SD-JWT without a
Key Binding JWT:</t>

<sourcecode type="txt"><![CDATA[eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJfc2QiOiBbIjA5dkt
ySk1PbHlUV00wc2pwdV9wZE9CVkJRMk0xeTNLaHBINTE1blhrcFkiLCAiMnJzakdiYUM
wa3k4bVQwcEpyUGlvV1RxMF9kYXcxc1g3NnBvVWxnQ3diSSIsICJFa084ZGhXMGRIRUp
idlVIbEVfVkNldUM5dVJFTE9pZUxaaGg3WGJVVHRBIiwgIklsRHpJS2VpWmREd3BxcEs
2WmZieXBoRnZ6NUZnbldhLXNONndxUVhDaXciLCAiSnpZakg0c3ZsaUgwUjNQeUVNZmV
adTZKdDY5dTVxZWhabzdGN0VQWWxTRSIsICJQb3JGYnBLdVZ1Nnh5bUphZ3ZrRnNGWEF
iUm9jMkpHbEFVQTJCQTRvN2NJIiwgIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc
1cnREc3JaemZVYW9tTG8iLCAiamRyVEU4WWNiWTRFaWZ1Z2loaUFlX0JQZWt4SlFaSUN
laVVRd1k5UXF4SSIsICJqc3U5eVZ1bHdRUWxoRmxNXzNKbHpNYVNGemdsaFFHMERwZmF
5UXdMVUs0Il0sICJpc3MiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9pc3N1ZXIiLCAiaWF
0IjogMTY4MzAwMDAwMCwgImV4cCI6IDE4ODMwMDAwMDAsICJ2Y3QiOiAiaHR0cHM6Ly9
jcmVkZW50aWFscy5leGFtcGxlLmNvbS9pZGVudGl0eV9jcmVkZW50aWFsIiwgIl9zZF9
hbGciOiAic2hhLTI1NiJ9.DIc1SJC0iOsD7XvBXXhma-BAYUKRSEJuDtSS3ENHVqh5as
oEhcOEBWlloyNQXyorxCHQqVErSSn5quES1Mbo8Q~WyJsa2x4RjVqTVlsR1RQVW92TU5
JdkNBIiwgImlzX292ZXJfNjUiLCB0cnVlXQ~WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9B
IiwgImFkZHJlc3MiLCB7InN0cmVldF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxv
Y2FsaXR5IjogIkFueXRvd24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnki
OiAiVVMifV0~
]]>
</sourcecode>
<t>The Verifier will have the following processed SD-JWT payload after validation:</t>

<sourcecode type="json"><![CDATA[{
  "iss": "https://example.com/issuer",
  "iat": 1683000000,
  "exp": 1883000000,
  "vct": "https://credentials.example.com/identity_credential",
  "is_over_65": true,
  "address": {
    "street_address": "123 Main St",
    "locality": "Anytown",
    "region": "Anystate",
    "country": "US"
  }
}
]]>
</sourcecode>
</section>
</section>

<section anchor="jwt-vc-issuer-metadata"><name>JWT VC Issuer Metadata</name>
<t>This specification defines the JWT VC Issuer Metadata to retrieve the JWT VC
Issuer Metadata configuration of the Issuer of the SD-JWT VC. The Issuer
is identified by the <tt>iss</tt> claim in the JWT. Use of the JWT VC Issuer Metadata
is OPTIONAL.</t>
<t>Issuers publishing JWT VC Issuer Metadata MUST make a JWT VC Issuer Metadata
configuration available at the location formed by inserting the well-known string
<tt>/.well-known/jwt-vc-issuer</tt> between the host component and the path
component (if any) of the <tt>iss</tt> claim value in the JWT. The <tt>iss</tt> MUST
be a case-sensitive URL using the HTTPS scheme that contains scheme, host and,
optionally, port number and path components, but no query or fragment
components.</t>

<section anchor="jwt-vc-issuer-metadata-request"><name>JWT VC Issuer Metadata Request</name>
<t>A JWT VC Issuer Metadata configuration MUST be queried using an HTTP <tt>GET</tt> request
at the path defined in <xref target="jwt-vc-issuer-metadata"/>.</t>
<t>The following is a non-normative example of an HTTP request for the JWT VC Issuer
Metadata configuration when <tt>iss</tt> is set to <tt>https://example.com</tt>:</t>

<artwork><![CDATA[GET /.well-known/jwt-vc-issuer HTTP/1.1
Host: example.com
]]>
</artwork>
<t>If the <tt>iss</tt> value contains a path component, any terminating <tt>/</tt> MUST be
removed before inserting <tt>/.well-known/</tt> and the well-known URI suffix
between the host component and the path component.</t>
<t>The following is a non-normative example of a HTTP request for the JWT VC Issuer
Metadata configuration when <tt>iss</tt> is set to <tt>https://example.com/tenant/1234</tt>:</t>

<artwork><![CDATA[GET /.well-known/jwt-vc-issuer/tenant/1234 HTTP/1.1
Host: example.com
]]>
</artwork>
</section>

<section anchor="jwt-vc-issuer-metadata-response"><name>JWT VC Issuer Metadata Response</name>
<t>A successful response MUST use the <tt>200 OK HTTP</tt> and return the JWT VC Issuer
Metadata configuration using the <tt>application/json</tt> content type.</t>
<t>An error response uses the applicable HTTP status code value.</t>
<t>This specification defines the following JWT VC Issuer Metadata configuration
parameters:</t>

<ul spacing="compact">
<li><t><tt>issuer</tt></t>

<ul spacing="compact">
<li>REQUIRED. The Issuer identifier, which MUST be identical to the <tt>iss</tt>
value in the JWT.</li>
</ul></li>
<li><t><tt>jwks_uri</tt></t>

<ul spacing="compact">
<li>OPTIONAL. URL string referencing the Issuer's JSON Web Key (JWK) Set
<xref target="RFC7517"/> document which contains the Issuer's public keys. The value of
this field MUST point to a valid JWK Set document.</li>
</ul></li>
<li><t><tt>jwks</tt></t>

<ul spacing="compact">
<li>OPTIONAL. Issuer's JSON Web Key Set <xref target="RFC7517"/> document value, which
contains the Issuer's public keys. The value of this field MUST be a JSON
object containing a valid JWK Set.</li>
</ul></li>
</ul>
<t>JWT VC Issuer Metadata MUST include either <tt>jwks_uri</tt> or <tt>jwks</tt> in their JWT VC
Issuer Metadata, but not both.</t>
<t>It is RECOMMENDED that the JWT contains a <tt>kid</tt> JWT header parameter that can
be used to look up the public key in the JWK Set included by value or referenced
in the JWT VC Issuer Metadata.</t>
<t>The following is a non-normative example of a JWT VC Issuer Metadata configuration
including <tt>jwks</tt>:</t>

<artwork><![CDATA[{
   "issuer":"https://example.com",
   "jwks":{
      "keys":[
         {
            "kid":"doc-signer-05-25-2022",
            "e":"AQAB",
            "n":"nj3YJwsLUFl9BmpAbkOswCNVx17Eh9wMO-_AReZwBqfaWFcfG
   HrZXsIV2VMCNVNU8Tpb4obUaSXcRcQ-VMsfQPJm9IzgtRdAY8NN8Xb7PEcYyk
   lBjvTtuPbpzIaqyiUepzUXNDFuAOOkrIol3WmflPUUgMKULBN0EUd1fpOD70p
   RM0rlp_gg_WNUKoW1V-3keYUJoXH9NztEDm_D2MQXj9eGOJJ8yPgGL8PAZMLe
   2R7jb9TxOCPDED7tY_TU4nFPlxptw59A42mldEmViXsKQt60s1SLboazxFKve
   qXC_jpLUt22OC6GUG63p-REw-ZOr3r845z50wMuzifQrMI9bQ",
            "kty":"RSA"
         }
      ]
   }
}
]]>
</artwork>
<t>The following is a non-normative example of a JWT VC Issuer Metadata
configuration including <tt>jwks_uri</tt>:</t>

<artwork><![CDATA[{
   "issuer":"https://example.com",
   "jwks_uri":"https://jwt-vc-issuer.example.org/my_public_keys.jwks"
}
]]>
</artwork>
<t>Additional JWT VC Issuer Metadata configuration parameters MAY also be used.</t>
</section>

<section anchor="jwt-vc-issuer-metadata-validation"><name>JWT VC Issuer Metadata Validation</name>
<t>The <tt>issuer</tt> value returned MUST be identical to the <tt>iss</tt> value of the
JWT. If these values are not identical, the data contained in the response
MUST NOT be used.</t>
</section>
</section>

<section anchor="type-metadata"><name>SD-JWT VC Type Metadata</name>
<t>An SD-JWT VC type, i.e., the <tt>vct</tt> value, is associated with Type Metadata defining, for example, information about the type or a schema defining (see <xref target="schema-definition"/>) which claims MAY or MUST appear in the SD-JWT VC, and how credentials are displayed.</t>
<t>This section defines Type Metadata that can be associated with a type of a SD-JWT VC, as well as a method for retrieving the Type Metadata and processing rules. This Type Metadata is intended to be used, among other things, for the following purposes:</t>

<ul spacing="compact">
<li>Developers of Issuers and Verifiers can use the Type Metadata to understand the
semantics of the type and the associated rules. While in some cases,
Issuers are the parties that define types, this is
not always the case. For example, a type can be defined by a
standardization body or a community.</li>
<li>Verifiers can use the Type Metadata to determine whether a credential is valid
according to the rules of the type. For example, a Verifier can check
whether a credential contains all required claims and whether the claims
are selectively disclosable.</li>
<li>Wallets can use the metadata to display the credential in a way that is
consistent with the intent of the provider of the Type Metadata.</li>
</ul>
<t>Type Metadata can be retrieved as described in <xref target="retrieving-type-metadata"/>.</t>

<section anchor="type-metadata-example"><name>Type Metadata Example</name>
<t>All examples in this section are non-normative.</t>
<t>The following is an example of an SD-JWT VC payload, containing a <tt>vct</tt> claim
with the value <tt>https://betelgeuse.example.com/education_credential</tt>:</t>

<sourcecode type="json"><![CDATA[{
  "vct": "https://betelgeuse.example.com/education_credential",
  "vct#integrity": "sha256-WRL5ca_xGgX3c1VLmXfh-9cLlJNXN-TsMk-PmKjZ5t0",
  ...
}
]]>
</sourcecode>
<t>Type Metadata for the type <tt>https://betelgeuse.example.com/education_credential</tt>
can be retrieved using various mechanisms as described in
<xref target="retrieving-type-metadata"/>. For this example, the well-known URL as defined in
<xref target="retrieval-from-vct-claim"/> is used and the following Type Metadata Document is
retrieved from the URL
<tt>https://betelgeuse.example.com/.well-known/vct/education_credential</tt>:</t>

<sourcecode type="json"><![CDATA[{
  "vct":"https://betelgeuse.example.com/education_credential",
  "name":"Betelgeuse Education Credential - Preliminary Version",
  "description":"This is our development version of the education credential. Don't panic.",
  "extends":"https://galaxy.example.com/galactic-education-credential-0.9",
  "extends#integrity":"sha256-9cLlJNXN-TsMk-PmKjZ5t0WRL5ca_xGgX3c1VLmXfh-WRL5",
  "schema_uri":"https://exampleuniversity.com/public/credential-schema-0.9",
  "schema_uri#integrity":"sha256-o984vn819a48ui1llkwPmKjZ5t0WRL5ca_xGgX3c1VLmXfh"
}
]]>
</sourcecode>
<t>This example is shortened for presentation, a full Type Metadata example can be found in <xref target="ExampleTypeMetadata"/>.</t>
<t>Note: The hash of the Type Metadata document shown in the second example must be equal
to the one in the <tt>vct#integrity</tt> claim in the SD-JWT VC payload,
<tt>WRL5ca_xGgX3c1VLmXfh-9cLlJNXN-TsMk-PmKjZ5t0</tt>.</t>
</section>

<section anchor="type-metadata-format"><name>Type Metadata Format</name>
<t>The Type Metadata document MUST be a JSON object. The following properties are
defined:</t>

<ul spacing="compact">
<li><t><tt>name</tt></t>

<ul spacing="compact">
<li>OPTIONAL. A human-readable name for the type, intended for developers reading
the JSON document.</li>
</ul></li>
<li><t><tt>description</tt></t>

<ul spacing="compact">
<li>OPTIONAL. A human-readable description for the type, intended for
developers reading the JSON document.</li>
</ul></li>
<li><t><tt>extends</tt></t>

<ul spacing="compact">
<li>OPTIONAL. A URI of another type that this type extends, as described in
<xref target="extending-type-metadata"/>.</li>
</ul></li>
<li><tt>display</tt>: An array of objects containing display information for the type, as described
in <xref target="display-metadata"/>. This property is OPTIONAL.</li>
<li><tt>claims</tt>: An array of objects containing claim information for the type, as described in
<xref target="claim-metadata"/>. This property is OPTIONAL.</li>
<li><t><tt>schema</tt></t>

<ul spacing="compact">
<li>OPTIONAL. An embedded JSON Schema document describing the structure of
the Verifiable Credential as described in <xref target="schema-definition"/>. <tt>schema</tt> MUST NOT be used
if <tt>schema_uri</tt> is present.</li>
</ul></li>
<li><t><tt>schema_uri</tt></t>

<ul spacing="compact">
<li>OPTIONAL. A URL pointing to a JSON Schema document describing the structure
of the Verifiable Credential as described in <xref target="schema-definition"/>. <tt>schema_uri</tt> MUST NOT
be used if <tt>schema</tt> is present.</li>
</ul></li>
</ul>
<t>An example of a Type Metadata document is shown in <xref target="ExampleTypeMetadata"/>.</t>
</section>

<section anchor="retrieving-type-metadata"><name>Retrieving Type Metadata</name>

<section anchor="retrieval-from-vct-claim"><name>From a URL in the <tt>vct</tt> Claim</name>
<t>A URI in the <tt>vct</tt> claim can be used to express a type. If the
type is a URL using the HTTPS scheme, Type Metadata can be retrieved from the URL
<tt>https://&lt;authority&gt;/.well-known/vct/&lt;type&gt;</tt>, i.e., by inserting
<tt>/.well-known/vct</tt> after the authority part of the URL.</t>
<t>The Type Metadata is retrieved using the HTTP GET method. The response MUST be a JSON
object as defined in <xref target="type-metadata-format"/>.</t>
<t>If the claim <tt>vct#integrity</tt> is present in the SD-JWT VC, its value
<tt>vct#integrity</tt> MUST be an "integrity metadata" string as defined in Section <xref target="document-integrity"/>.</t>
</section>

<section anchor="retrieval-from-registry"><name>From a Registry</name>
<t>A Consumer MAY use a registry to retrieve Type Metadata for a SD-JWT VC type,
e.g., if the type is not a HTTPS URL or if the Consumer does not have
access to the URL. The registry MUST be a trusted registry, i.e., the Consumer MUST trust the registry to provide correct Type Metadata for the type.</t>
<t>The registry MUST provide the Type Metadata in the same format as described in
<xref target="type-metadata-format"/>.</t>
</section>

<section anchor="defined-retrieval-method"><name>Using a Defined Retrieval Method</name>
<t>Ecosystems MAY define additional methods for retrieving Type Metadata. For example, a
standardization body or a community MAY define a service which has to be used to
retrieve Type Metadata based on a URN in the <tt>vct</tt> claim.</t>
</section>

<section anchor="retrieval-from-local-cache"><name>From a Local Cache</name>
<t>A Consumer MAY cache Type Metadata for a SD-JWT VC type. If a hash for integrity
protection is present in the Type Metadata as defined in <xref target="document-integrity"/>, the Consumer MAY assume that the Type Metadata is static and can be cached
indefinitely. Otherwise, the Consumer MUST use the <tt>Cache-Control</tt>
header of the HTTP response to determine how long the metadata can be cached.</t>
</section>

<section anchor="glue-documents"><name>From Type Metadata Glue Documents</name>
<t>Credentials MAY encode Type Metadata directly, providing it as "glue
information" to the Consumer.</t>
<t>For JSON-serialized JWS-based credentials, such Type Metadata documents MAY be
included in the unprotected header of the JWS. In this case, the key <tt>vctm</tt> MUST
be used in the unprotected header and its value MUST be an array of
base64url-encoded Type Metadata documents as defined in this specification.
Multiple documents MAY be included for providing a whole chain of types to the
Consumer (see <xref target="extending-type-metadata"/>).</t>
<t>A Consumer of a credential MAY use the documents in the <tt>vctm</tt>
array instead of retrieving the respective Type Metadata elsewhere as follows:</t>

<ul spacing="compact">
<li>When resolving a <tt>vct</tt> in a credential, the Consumer MUST ensure
that the <tt>vct</tt> claim in the credential matches the one in the Type Metadata
document, and it MUST verify the integrity of the Type Metadata document as
defined in <xref target="document-integrity"/>. The Consumer MUST NOT use the Type Metadata if no hash for integrity protection was provided in <tt>vct#integrity</tt>.</li>
<li>When resolving an <tt>extends</tt> property in a Type Metadata document, the Consumer MUST ensure that the value of the <tt>extends</tt> property in the
Type Metadata document matches that of the <tt>vct</tt> in the Type Metadata document, and it MUST verify the integrity of the Type Metadata document as defined in
<xref target="document-integrity"/>. The Consumer MUST NOT use the Type Metadata if no hash for integrity protection was provided.</li>
</ul>
</section>
</section>

<section anchor="extending-type-metadata"><name>Extending Type Metadata</name>
<t>An SD-JWT VC type can extend another type. The extended type is identified by the URI in
the <tt>extends</tt> property. Consumers MUST retrieve and process
Type Metadata for the extended type before processing the Type Metadata for the extending
type.</t>
<t>The extended type MAY itself extend another type. This can be used to create a
chain or hierarchy of types. The security considerations described in
<xref target="circular-extends"/> apply in order to avoid problems with circular dependencies.</t>
</section>

<section anchor="schema-type-metadata"><name>Schema Type Metadata</name>

<section anchor="schema-definition"><name>Schema Definition</name>
<t>Schemas for Verifiable Credentials are contained in the <tt>schema</tt> or retrieved via the <tt>schema_uri</tt> Type Metadata parameters (as defined in <xref target="type-metadata-format"/>).
A schema MUST be represented by a JSON Schema document according to draft version 2020-12 <xref target="JSON.SCHEMA.2020-12"/> or above.</t>
<t>The schema of a Verifiable Credential MUST include all properties that are required by this specification and MUST NOT override their cardinality, JSON data type, or semantic intent.</t>
<t>The following is a non-normative example of a JSON Schema document for the example in <xref target="vc-sd-jwt-example"/> requiring the presence of the <tt>cnf</tt> claim in an SD-JWT VC presentation:</t>

<artwork><![CDATA[{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "type":"object",
  "properties":{
    "vct":{
      "type":"string"
    },
    "iss":{
      "type":"string"
    },
    "nbf":{
      "type":"number"
    },
    "exp":{
      "type":"number"
    },
    "cnf":{
      "type":"object"
    },
    "status":{
      "type":"object"
    },
    "given_name":{
      "type":"string"
    },
    "family_name":{
      "type":"string"
    },
    "email":{
      "type":"string"
    },
    "phone_number":{
      "type":"string"
    },
    "address":{
      "type":"object",
      "properties":{
        "street_address":{
          "type":"string"
        },
        "locality":{
          "type":"string"
        },
        "region":{
          "type":"string"
        },
        "country":{
          "type":"string"
        }
      }
    },
    "birthdate":{
      "type":"string"
    },
    "is_over_18":{
      "type":"boolean"
    },
    "is_over_21":{
      "type":"boolean"
    },
    "is_over_65":{
      "type":"boolean"
    }
  },
  "required":[
    "iss",
    "vct",
    "cnf"
  ]
}
]]>
</artwork>
<t>Note that <tt>iss</tt> and <tt>vct</tt> are always required by this specification.</t>
</section>

<section anchor="schema-validation"><name>Schema Validation</name>
<t>If a <tt>schema</tt> or <tt>schema_uri</tt> property is present, a Consumer MUST validate the JSON document resulting from the SD-JWT verification algorithm
(as defined in Section 8 of <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>) against the JSON Schema document provided by the <tt>schema</tt> or <tt>schema_uri</tt> property.</t>
<t>If an <tt>extends</tt> property is present, the schema of the extended type MUST also be validated in the same manner. This process includes
validating all subsequent extended types recursively until a type is encountered that does not contain an <tt>extends</tt> property in its Type Metadata.
Each schema in this chain MUST be evaluated for a specific Verifiable Credential.</t>
<t>If the schema validation fails for any of the types in the chain, the Consumer MUST reject the Verifiable Credential.</t>
<t>The following is a non-normative example of a result JSON document after executing the SD-JWT verification algorithm that is validated against the JSON Schema document in the example provided in <xref target="schema-definition"/>:</t>

<artwork><![CDATA[{
  "vct":"https://credentials.example.com/identity_credential",
  "iss":"https://example.com/issuer",
  "iat":1683000000,
  "exp":1883000000,
  "sub":"6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "address":{
    "country":"DE"
  },
  "cnf":{
    "jwk":{
      "kty":"EC",
      "crv":"P-256",
      "x":"TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y":"ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
]]>
</artwork>
<t>Note, the example above does not contain any <tt>_sd_alg</tt>, <tt>_sd</tt>, or <tt>...</tt> claims.</t>
</section>
</section>
</section>

<section anchor="document-integrity"><name>Document Integrity</name>
<t>Both the <tt>vct</tt> claim in the SD-JWT VC and the various URIs in the Type Metadata MAY be accompanied by a respective claim suffixed with <tt>#integrity</tt>, in particular:</t>

<ul spacing="compact">
<li><tt>vct</tt> as defined in <xref target="claims"/>,</li>
<li><tt>extends</tt> as defined in <xref target="extending-type-metadata"/></li>
<li><tt>uri</tt> as used in two places in <xref target="rendering-metadata"/></li>
<li><tt>schema_uri</tt> as defined in <xref target="schema-type-metadata"/></li>
</ul>
<t>The value MUST be an "integrity metadata" string as defined in Section 3 of
<xref target="W3C.SRI"/>. A Consumer of the respective documents MUST verify the
integrity of the retrieved document as defined in Section 3.3.5 of <xref target="W3C.SRI"/>.</t>
</section>

<section anchor="display-metadata"><name>Display Metadata</name>
<t>The <tt>display</tt> property is an array containing display information for the type.
The array MUST contain an object for each language that is supported by the
type. The consuming application MUST use the language tag it considers most
appropriate for the user.</t>
<t>The objects in the array have the following properties:</t>

<ul spacing="compact">
<li><tt>lang</tt>: A language tag as defined in Section 2 of <xref target="RFC5646"/>. This property is REQUIRED.</li>
<li><tt>name</tt>: A human-readable name for the type, intended for end users. This
property is REQUIRED.</li>
<li><tt>description</tt>: A human-readable description for the type, intended for end
users. This property is OPTIONAL.</li>
<li><tt>rendering</tt>: An object containing rendering information for the type, as
described in <xref target="rendering-metadata"/>. This property is OPTIONAL.</li>
</ul>

<section anchor="rendering-metadata"><name>Rendering Metadata</name>
<t>The <tt>rendering</tt> property is an object containing rendering information for the
type. The object MUST contain a property for each rendering method that is
supported by the type. The property name MUST be a rendering method identifier
and the property value MUST be an object containing the properties defined for
the rendering method.</t>

<section anchor="rendering-method-simple"><name>Rendering Method "simple"</name>
<t>The <tt>simple</tt> rendering method is intended for use in applications that do not
support SVG rendering. The object contains the following properties:</t>

<ul spacing="compact">
<li><tt>logo</tt>: An object containing information about the logo to be displayed for
the type, as described in <xref target="logo-metadata"/>. This property is OPTIONAL.</li>
<li><tt>background_color</tt>: An RGB color value as defined in <xref target="W3C.CSS-COLOR"/> for the background of the credential.
This property is OPTIONAL.</li>
<li><tt>text_color</tt>: An RGB color value as defined in <xref target="W3C.CSS-COLOR"/> value for the text of the credential. This property
is OPTIONAL.</li>
</ul>

<section anchor="logo-metadata"><name>Logo Metadata</name>
<t>The <tt>logo</tt> property is an object containing information about the logo to be
displayed for the type. The object contains the following properties:</t>

<ul spacing="compact">
<li><tt>uri</tt>: A URI pointing to the logo image. This property is REQUIRED.</li>
<li><tt>uri#integrity</tt>: An "integrity metadata" string as described in
<xref target="document-integrity"/>. This property is OPTIONAL.</li>
<li><tt>alt_text</tt>: A string containing alternative text for the logo image. This
property is OPTIONAL.</li>
</ul>
</section>
</section>

<section anchor="rendering-method-svg"><name>Rendering Method "svg_template"</name>
<t>The <tt>svg_template</tt> rendering method is intended for use in applications that
support SVG rendering. The object MUST contain an array of objects containing
information about the SVG templates available for the type. Each object contains
the following properties:</t>

<ul spacing="compact">
<li><tt>uri</tt>: A URI pointing to the SVG template. This property is REQUIRED.</li>
<li><tt>uri#integrity</tt>: An "integrity metadata" string as described in
<xref target="document-integrity"/>. This property is OPTIONAL.</li>
<li><tt>properties</tt>: An object containing properties for the SVG template, as
described in <xref target="svg-template-properties"/>. This property is REQUIRED if more than
one SVG template is present, otherwise it is OPTIONAL.</li>
</ul>

<section anchor="svg-template-properties"><name>SVG Template Properties</name>
<t>The <tt>properties</tt> property is an object containing properties for the SVG
template. Consuming applications MUST use these properties to find the best SVG
template available for display to the user based on the display properties
(landscape/portrait) and user preferences (color scheme, contrast). The object
MUST contain at least one of the following properties:</t>

<ul spacing="compact">
<li><tt>orientation</tt>: The orientation for which the SVG template is optimized, with
valid values being <tt>portrait</tt> and <tt>landscape</tt>. This property is OPTIONAL.</li>
<li><tt>color_scheme</tt>: The color scheme for which the SVG template is optimized, with
valid values being <tt>light</tt> and <tt>dark</tt>. This property is OPTIONAL.</li>
<li><tt>contrast</tt>: The contrast for which the SVG template is optimized, with valid
values being <tt>normal</tt> and <tt>high</tt>. This property is OPTIONAL.</li>
</ul>
</section>

<section anchor="svg-rendering"><name>SVG Rendering</name>
<t>Consuming application MUST preprocess the SVG template by replacing placeholders
in the SVG template with properly escaped values of the claims in the credential. The
placeholders MUST be defined in the SVG template using the syntax
<tt>{{svg_id}}</tt>, where <tt>svg_id</tt> is an identifier defined in the claim metadata as
described in <xref target="claim-metadata"/>.</t>
<t>Placeholders MUST only be used in the text content of the SVG template and MUST NOT
be used in any other part of the SVG template, e.g., in attributes or comments.</t>
<t>A consuming application MUST ensure that all special characters in the claim
values are properly escaped before inserting them into the SVG template. At
least the following characters MUST be escaped:</t>

<ul spacing="compact">
<li><tt>&amp;</tt> as <tt>&amp;amp;</tt></li>
<li><tt>&lt;</tt> as <tt>&amp;lt;</tt></li>
<li><tt>&gt;</tt> as <tt>&amp;gt;</tt></li>
<li><tt>"</tt> as <tt>&amp;quot;</tt></li>
<li><tt>'</tt> as <tt>&amp;apos;</tt></li>
</ul>
<t>If the <tt>svg_id</tt> is not present in the claim metadata, the consuming application
SHOULD reject not render the SVG template. If the <tt>svg_id</tt> is present in the
claim metadata, but the claim is not present in the credential, the placeholder
MUST be replaced with an empty string or a string appropriate to indicate that
the value is absent.</t>
<t>The following non-normative example shows a minimal SVG with one placeholder
using the <tt>svg_id</tt> value <tt>address_street_address</tt> which is defined in the
example in <xref target="ExampleTypeMetadata"/>:</t>

<sourcecode type="svg"><![CDATA[<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
  <text x="10" y="20">Street address: {{address_street_address}}</text>
</svg>
]]>
</sourcecode>
<t>When rendering the SVG template, the consuming application MUST ensure that
malicious schema providers or issuers cannot inject executable code into the SVG
template and thereby compromise the security of the consuming application. The
consuming application MUST NOT execute any code in the SVG template. If code
execution cannot be prevented reliably, the SVG display MUST be sandboxed.</t>
</section>
</section>
</section>
</section>

<section anchor="claim-metadata"><name>Claim Metadata</name>
<t>The <tt>claims</tt> property is an array of objects containing information about
particular claims for displaying and validating the claims.</t>
<t>The array MAY contain an object for each claim that is supported by the type.
Each object contains the following properties:</t>

<ul spacing="compact">
<li><tt>path</tt>: An array indicating the claim or claims that are being addressed, as
described below. This property is REQUIRED.</li>
<li><tt>display</tt>: An object containing display information for the claim, as
described in <xref target="claim-display-metadata"/>. This property is OPTIONAL.</li>
<li><tt>sd</tt>: A string indicating whether the claim is selectively disclosable, as
described in <xref target="claim-selective-disclosure-metadata"/>. This property is OPTIONAL.</li>
<li><tt>svg_id</tt>: A string defining the ID of the claim for reference in the SVG
template, as described in <xref target="svg-rendering"/>. The ID MUST be unique within the
type metadata. It MUST consist of only alphanumeric characters and underscores
and MUST NOT start with a digit. This property is OPTIONAL.</li>
</ul>

<section anchor="claim-path"><name>Claim Path</name>
<t>The <tt>path</tt> property MUST be a non-empty array of strings, <tt>null</tt> values, or
non-negative integers. It is used to select a particular claim in the credential
or a set of claims. A string indicates that the respective key is to be
selected, a <tt>null</tt> value indicates that all elements of the currently selected
array(s) are to be selected, and a non-negative integer indicates that the
respective index in an array is to be selected.</t>
<t>The following shows a non-normative, reduced example of a credential:</t>

<sourcecode type="json"><![CDATA[{
  "vct": "https://betelgeuse.example.com/education_credential",
  "name": "Arthur Dent",
  "address": {
    "street_address": "42 Market Street",
    "city": "Milliways",
    "postal_code": "12345"
  },
  "degrees": [
    {
      "type": "Bachelor of Science",
      "university": "University of Betelgeuse"
    },
    {
      "type": "Master of Science",
      "university": "University of Betelgeuse"
    }
  ],
  "nationalities": ["British", "Betelgeusian"]
}
]]>
</sourcecode>
<t>The following shows examples of <tt>path</tt> values and the respective selected
claims in the credential above:</t>

<ul spacing="compact">
<li><tt>["name"]</tt>: The claim <tt>name</tt> with the value <tt>Arthur Dent</tt> is selected.</li>
<li><tt>["address"]</tt>: The claim <tt>address</tt> with its sub-claims as the value is selected.</li>
<li><tt>["address", "street_address"]</tt>: The claim <tt>street_address</tt> with the value
<tt>42 Market Street</tt> is selected.</li>
<li><tt>["degrees", null, "type"]</tt>: All <tt>type</tt> claims in the <tt>degrees</tt> array are
selected.</li>
</ul>
<t>In detail, the array is processed from left to right as follows:</t>

<ol spacing="compact">
<li>Select the root element of the credential, i.e., the top-level JSON object.</li>
<li><t>Process the <tt>path</tt> components from left to right:</t>

<ol spacing="compact">
<li>If the <tt>path</tt> component is a string, select the element in the respective
key in the currently selected element(s). If any of the currently
selected element(s) is not an object, abort processing and return an
error. If the key does not exist in any element currently selected,
remove that element from the selection.</li>
<li>If the <tt>path</tt> component is <tt>null</tt>, select all elements of the currently
selected array(s). If any of the currently selected element(s) is not an
array, abort processing and return an error.</li>
<li>If the <tt>path</tt> component is a non-negative integer, select the element at
the respective index in the currently selected array(s). If any of the
currently selected element(s) is not an array, abort processing and
return an error. If the index does not exist in a selected array, remove
that array from the selection.</li>
<li>If the set of elements currently selected is empty, abort processing and
return an error.</li>
</ol></li>
</ol>
<t>The result of the processing is the set of elements to which the respective
claim metadata applies.</t>
<t>The <tt>path</tt> property MUST point to the respective claim as if all
selectively disclosable claims were disclosed to a Verifier. That means that a
consuming application which does not have access to all disclosures may not be
able to identify the claim which is being addressed.</t>
</section>

<section anchor="claim-display-metadata"><name>Claim Display Metadata</name>
<t>The <tt>display</tt> property is an array containing display information for the
claim. The array MUST contain an object for each language that is supported by
the type. The consuming application MUST use the language tag it considers most
appropriate for the user.</t>
<t>The objects in the array have the following properties:</t>

<ul spacing="compact">
<li><tt>lang</tt>: A language tag as defined in Section 2 of <xref target="RFC5646"/>. This property is REQUIRED.</li>
<li><tt>label</tt>: A human-readable label for the claim, intended for end users. This
property is REQUIRED.</li>
<li><tt>description</tt>: A human-readable description for the claim, intended for end
users. This property is OPTIONAL.</li>
</ul>
</section>

<section anchor="claim-selective-disclosure-metadata"><name>Claim Selective Disclosure Metadata</name>
<t>The <tt>sd</tt> property is a string indicating whether the claim is selectively
disclosable. The following values are defined:</t>

<ul spacing="compact">
<li><tt>always</tt>: The Issuer MUST make the claim selectively disclosable.</li>
<li><tt>allowed</tt>: The Issuer MAY make the claim selectively disclosable.</li>
<li><tt>never</tt>: The Issuer MUST NOT make the claim selectively disclosable.</li>
</ul>
<t>If omitted, the default value is <tt>allowed</tt>.</t>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>The Security Considerations in the SD-JWT specification
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> apply to this specification.
Additionally, the following security considerations need to be taken into
account when using SD-JWT VCs:</t>

<section anchor="server-side-request-forgery"><name>Server-Side Request Forgery</name>
<t>The JWT VC Issuer Metadata configuration is retrieved from the JWT VC Issuer by the
Holder or Verifier. Similar to other metadata endpoints, the URL for the
retrieval MUST be considered an untrusted value and could be a vector for
Server-Side Request Forgery (SSRF) attacks.</t>
<t>Before making a request to the JWT VC Issuer Metadata endpoint, the Holder or
Verifier MUST validate the URL to ensure that it is a valid HTTPS URL and that
it does not point to internal resources. This requires, in particular, ensuring
that the host part of the URL does not address an internal service (by IP
address or an internal host name) and that, if an external DNS name is used, the
resolved DNS name does not point to an internal IPv4 or IPv6 address.</t>
<t>When retrieving the metadata, the Holder or Verifier MUST ensure that the
request is made in a time-bound and size-bound manner to prevent denial of
service attacks. The Holder or Verifier MUST also ensure that the response is a
valid JWT VC Issuer Metadata configuration document before processing it.</t>
<t>Additional considerations can be found in <xref target="OWASP_SSRF"/>.</t>
</section>

<section anchor="ecosystem-verification-rules"><name>Ecosystem-specific Public Key Verification Methods</name>
<t>When defining ecosystem-specific rules for the verification of the public key,
as outlined in <xref target="issuer-signed-jwt-verification-key-validation"/>, it is critical
that those rules maintain the integrity of the relationship between the <tt>iss</tt> value
within the Issuer-signed JWT and the public keys of the Issuer.</t>
<t>It MUST be ensured that for any given <tt>iss</tt> value, an attacker cannot influence
the type of verification process used. Otherwise, an attacker could attempt to make
the Verifier use a verification process not intended by the Issuer, allowing the
attacker to potentially manipulate the verification result to their advantage.</t>
</section>

<section anchor="circular-extends"><name>Circular "extends" Dependencies of Types</name>
<t>A type MUST NOT extend another type that extends (either directly or with steps
in-between) the first type. This would result in a circular dependency that
could lead to infinite recursion when retrieving and processing the metadata.</t>
<t>Consumers MUST detect such circular dependencies and reject the
credential.</t>
</section>

<section anchor="robust-retrieval"><name>Robust Retrieval of Type Metadata</name>
<t>In <xref target="retrieving-type-metadata"/>, various methods for distributing and retrieving
metadata are described. Methods relying on a network connection may fail due to
network issues or unavailability of a network connection due to offline usage of
credentials, temporary server outages, or denial of service attacks on the
metadata server.</t>
<t>Consumers SHOULD therefore implement a local cache as described in
<xref target="retrieval-from-local-cache"/> if possible. Such a cache MAY be populated with metadata before
the credential is used.</t>
<t>Issuers MAY provide glue documents as described in <xref target="glue-documents"/> to provide
metadata directly with the credential and avoid the need for network requests.</t>
<t>These measures allow the Consumers to continue to function even if
the metadata server is temporarily unavailable and avoid privacy issues as
described in <xref target="privacy-preserving-retrieval-of-type-metadata"/>.</t>
</section>
</section>

<section anchor="privacy-considerations"><name>Privacy Considerations</name>
<t>The Privacy Considerations in the SD-JWT specification
<xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> apply to this specification.
Additionally, the following privacy considerations need to be taken into
account when using SD-JWT VCs.</t>

<section anchor="unlinkability"><name>Unlinkability</name>
<t>The Privacy Considerations in Section 12.5 of <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>
apply especially to the <tt>cnf</tt> claim.</t>
</section>

<section anchor="verifiable-credential-type-identifier"><name>Verifiable Credential Type Identifier</name>
<t>Issuers and Holders have to be aware that while this specification supports selective
disclosure of claims of a given SD-JWT VC, the <tt>vct</tt> claim is not selectively disclosable.
In certain situations this could lead to unwanted leakage of additional context information.</t>
<t>In general, Issuers are advised to choose <tt>vct</tt> values following data minimization principles.
For example, government Issuers issuing an SD-JWT VC to their citizens to enable them to prove their age,
might consider using a <tt>vct</tt> value that does not allow third-parties to infer additional personal information
about the Holder, e.g., country of residency or citizenship.</t>
<t>Additionally, Holders have to be informed that, besides the actual requested claims, the
<tt>vct</tt> information is shared with the Verifier.</t>
</section>

<section anchor="issuer-phone-home"><name>Issuer Phone-Home</name>
<t>A malicious Issuer can choose the Issuer identifier of the SD-JWT VC to enable tracking
the usage behavior of the Holder if the Issuer identifier is Holder-specific and if the
resolution of the key material to verify the Issuer-signed JWT requires the Verifier
to phone home to the Issuer.</t>
<t>For example, a malicious Issuer could generate a unique value for the Issuer identifier
per Holder, e.g., <tt>https://example.com/issuer/holder-1234</tt> and host the JWT VC Issuer Metadata.
The Verifier would create a HTTPS GET request to the Holder-specific well-known URI
when the SD-JWT VC is verified. This would allow the malicious Issuer to keep track where
and how often the SD-JWT VC was used.</t>
<t>Verifiers are advised to establish trust in an SD-JWT VC by pinning specific Issuer identifiers
and should monitor suspicious behaviour such as frequently rotating Issuer identifiers.
If such behaviour was detected, Verifiers are advised to reject SD-JWT VCs issued by such
Issuers.</t>
<t>Holders are advised to reject SD-JWT VCs if they contain easily correlatable information
in the Issuer identifier.</t>
</section>
</section>

<section anchor="relationships-to-other-documents"><name>Relationships to Other Documents</name>
<t>This specification defines validation and processing rules for verifiable credentials using JSON
payloads and secured by SD-JWT <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/>. Other specifications exist
that define their own verifiable credential formats; for example, W3C Verifiable
Credential Data Model (VCDM) 2.0 <xref target="W3C.VCDM"/> defines a data model for verifiable credentials encoded as JSON-LD, and
ISO/IEC 18013-5:2021 <xref target="ISO.18013-5"/> defines a representation of verifiable credentials in the mobile document (mdoc)
format encoded as CBOR and secured using COSE.</t>

<section anchor="privacy-preserving-retrieval-of-type-metadata"><name>Privacy-Preserving Retrieval of Type Metadata</name>
<t>In <xref target="retrieving-type-metadata"/>, various methods for distributing and retrieving
Type Metadata are described. For methods which rely on a network connection to a
URL (e.g., provided by an Issuer), third parties (like the Issuer) may be able
to track the usage of a credential by observing requests to the Type Metadata URL.</t>
<t>Consumers SHOULD prefer methods for retrieving Type Metadata that do not
leak information about the usage of a credential to third parties. The
recommendations in <xref target="robust-retrieval"/> apply.</t>
</section>
</section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-oauth-selective-disclosure-jwt.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-oauth-status-list.xml"/>
<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.5646.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5785.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7515.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.7800.xml"/>
<reference anchor="W3C.CSS-COLOR" target="https://www.w3.org/TR/css-color-3">
  <front>
    <title>CSS Color Module Level 3</title>
    <author fullname="Tantek Çelik" initials="T." surname="Çelik">
      <organization>
        
      </organization>
    </author>
    <author fullname="Chris Lilley" initials="C." surname="Lilley">
      <organization>
        
      </organization>
    </author>
    <author fullname="L. David Baron" initials="L. D." surname="Baron">
      <organization>
        
      </organization>
    </author>
    <date year="2022" month="January" day="18"/>
  </front>
</reference>
<reference anchor="W3C.SRI" target="https://www.w3.org/TR/SRI/">
  <front>
    <title>Subresource Integrity</title>
    <author fullname="Devdatta Akhawe" initials="D." surname="Akhawe">
      <organization>
                
            </organization>
    </author>
    <author fullname="Frederik Braun" initials="F." surname="Braun">
      <organization>
                
            </organization>
    </author>
    <author fullname="François Marier" initials="F." surname="Marier">
      <organization>
                
            </organization>
    </author>
    <author fullname="Joel Weinberger" initials="J." surname="Weinberger">
      <organization>
                
            </organization>
    </author>
    <date year="2016" month="June" day="23"/>
  </front>
</reference>
</references>
<references><name>Informative References</name>
<reference anchor="EUDIW.ARF" target="https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/releases">
  <front>
    <title>The European Digital Identity Wallet Architecture and Reference Framework</title>
    <author fullname="European Commission"/>
  </front>
</reference>
<reference anchor="IANA.well-known" target="http://www.iana.org/assignments/well-known-uris">
  <front>
    <title>Well-Known URIs</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="ISO.18013-5" target="https://www.iso.org/standard/69084.html">
  <front>
    <title>ISO/IEC 18013-5:2021</title>
    <author>
      <organization>ISO/IEC</organization>
    </author>
    <date year="2024" month="September" day="1"/>
  </front>
</reference>
<reference anchor="JSON.SCHEMA.2020-12" target="https://json-schema.org/draft/2020-12/release-notes">
  <front>
    <title>JSON Schema (2020-12)</title>
    <author fullname="OpenJS Foundation"/>
  </front>
</reference>
<reference anchor="OWASP_SSRF" target="https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html/">
  <front>
    <title>Server Side Request Forgery Prevention Cheat Sheet</title>
    <author fullname="OWASP"/>
  </front>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7517.xml"/>
<reference anchor="W3C.VCDM" target="https://www.w3.org/TR/vc-data-model-2.0/">
  <front>
    <title>Verifiable Credentials Data Model v2.0</title>
    <author fullname="Manu Sporny" initials="M." surname="Sporny">
      <organization>
                
            </organization>
    </author>
    <author fullname="Dave Longley" initials="D." surname="Longley">
      <organization>
                
            </organization>
    </author>
    <author fullname="David Chadwick" initials="D." surname="Chadwick">
      <organization>
                
            </organization>
    </author>
    <author fullname="Orie Steele" initials="O." surname="Steele">
      <organization>
                
            </organization>
    </author>
    <date year="2024" month="February" day="10"/>
  </front>
</reference>
</references>
</references>

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

<section anchor="json-web-token-claims-registration"><name>JSON Web Token Claims Registration</name>

<ul>
<li>Claim Name: "vct"</li>
<li>Claim Description: Verifiable credential type identifier</li>
<li>Change Controller: IETF</li>
<li><t>Specification Document(s): [[ <xref target="type-claim"/> of this specification ]]</t>
</li>
<li><t>Claim Name: "vct#integrity"</t>
</li>
<li><t>Claim Description: SD-JWT VC vct claim "integrity metadata" value</t>
</li>
<li><t>Change Controller: IETF</t>
</li>
<li><t>Specification Document(s): [[ <xref target="document-integrity"/> of this specification ]]</t>
</li>
</ul>
</section>

<section anchor="media-types-registry"><name>Media Types Registry</name>

<section anchor="media-type-1"><name>application/dc+sd-jwt</name>
<t>The Internet media type for an SD-JWT VC is <tt>application/dc+sd-jwt</tt>.</t>

<ul spacing="compact">
<li>Type name: <tt>application</tt></li>
<li>Subtype name: <tt>dc+sd-jwt</tt></li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: 8-bit code points; SD-JWT VC values are encoded as a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') and tilde ('~') characters.</li>
<li>Security considerations: See Security Considerations in <xref target="security-considerations"/>.</li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: [[ this specification ]]</li>
<li>Applications that use this media type: Applications that issue, present, and verify SD-JWT-based verifiable credentials.</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: Oliver Terbu <eref target="mailto:oliver.terbu@mattr.global">oliver.terbu@mattr.global</eref></li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Oliver Terbu <eref target="mailto:oliver.terbu@mattr.global">oliver.terbu@mattr.global</eref></li>
<li>Change controller: IETF</li>
</ul>
</section>
</section>

<section anchor="well-known-uri-registry"><name>Well-Known URI Registry</name>
<t>This specification requests the well-known URI defined in <xref target="jwt-vc-issuer-metadata"/>
in the IANA "Well-Known URIs" registry <xref target="IANA.well-known"/> established
by <xref target="RFC5785"/>.</t>

<section anchor="registry-contents"><name>Registry Contents</name>

<ul spacing="compact">
<li>URI suffix: jwt-vc-issuer</li>
<li>Change controller: IETF</li>
<li>Specification document: [[ <xref target="jwt-vc-issuer-metadata"/> of this specification ]]</li>
<li>Related information: (none)</li>
<li>Status: permanent</li>
</ul>
</section>
</section>
</section>

<section anchor="examples"><name>Examples</name>
<t>Important: The following examples are not normative and provided for
illustrative purposes only. In particular, neither the structure of the claims
nor the selection of selectively disclosable claims are normative.</t>
<t>Line breaks have been added for readability.</t>

<section anchor="example-1-person-identification-data-pid-credential"><name>Example 1: Person Identification Data (PID) Credential</name>
<t>This example shows how the artifacts defined in this specification could
be used to represent the concept of a Person Identification Data (PID)
<xref target="EUDIW.ARF"/> using the data of a German citizen.</t>
<t>Key Binding is applied
using the Holder's public key passed in a <tt>cnf</tt> claim in the SD-JWT.</t>
<t>The following data about the citizen comprises the input JWT Claims Set used by the Issuer:</t>

<sourcecode type="json"><![CDATA[{
  "vct": "https://bmi.bund.example/credential/pid/1.0",
  "given_name": "Erika",
  "family_name": "Mustermann",
  "birthdate": "1963-08-12",
  "source_document_type": "id_card",
  "address": {
    "street_address": "Heidestraße 17",
    "locality": "Köln",
    "postal_code": "51147",
    "country": "DE"
  },
  "nationalities": [
    "DE"
  ],
  "gender": "female",
  "birth_family_name": "Gabler",
  "place_of_birth": {
    "locality": "Berlin",
    "country": "DE"
  },
  "also_known_as": "Schwester Agnes",
  "age_equal_or_over": {
    "12": true,
    "14": true,
    "16": true,
    "18": true,
    "21": true,
    "65": false
  }
}
]]>
</sourcecode>
<t>The following is the issued SD-JWT:</t>

<sourcecode type="txt"><![CDATA[eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJfc2QiOiBbIjBIWm1
uU0lQejMzN2tTV2U3QzM0bC0tODhnekppLWVCSjJWel9ISndBVGciLCAiOVpicGxDN1R
kRVc3cWFsNkJCWmxNdHFKZG1lRU9pWGV2ZEpsb1hWSmRSUSIsICJJMDBmY0ZVb0RYQ3V
jcDV5eTJ1anFQc3NEVkdhV05pVWxpTnpfYXdEMGdjIiwgIklFQllTSkdOaFhJbHJRbzU
4eWtYbTJaeDN5bGw5WmxUdFRvUG8xN1FRaVkiLCAiTGFpNklVNmQ3R1FhZ1hSN0F2R1R
yblhnU2xkM3o4RUlnX2Z2M2ZPWjFXZyIsICJodkRYaHdtR2NKUXNCQ0EyT3RqdUxBY3d
BTXBEc2FVMG5rb3ZjS09xV05FIiwgImlrdXVyOFE0azhxM1ZjeUE3ZEMtbU5qWkJrUmV
EVFUtQ0c0bmlURTdPVFUiLCAicXZ6TkxqMnZoOW80U0VYT2ZNaVlEdXZUeWtkc1dDTmc
wd1RkbHIwQUVJTSIsICJ3elcxNWJoQ2t2a3N4VnZ1SjhSRjN4aThpNjRsbjFqb183NkJ
DMm9hMXVnIiwgInpPZUJYaHh2SVM0WnptUWNMbHhLdUVBT0dHQnlqT3FhMXoySW9WeF9
ZRFEiXSwgImlzcyI6ICJodHRwczovL2V4YW1wbGUuY29tL2lzc3VlciIsICJpYXQiOiA
xNjgzMDAwMDAwLCAiZXhwIjogMTg4MzAwMDAwMCwgInZjdCI6ICJodHRwczovL2JtaS5
idW5kLmV4YW1wbGUvY3JlZGVudGlhbC9waWQvMS4wIiwgImFnZV9lcXVhbF9vcl9vdmV
yIjogeyJfc2QiOiBbIkZjOElfMDdMT2NnUHdyREpLUXlJR085N3dWc09wbE1Makh2UkM
0UjQtV2ciLCAiWEx0TGphZFVXYzl6Tl85aE1KUm9xeTQ2VXNDS2IxSXNoWnV1cVVGS1N
DQSIsICJhb0NDenNDN3A0cWhaSUFoX2lkUkNTQ2E2NDF1eWNuYzh6UGZOV3o4bngwIiw
gImYxLVAwQTJkS1dhdnYxdUZuTVgyQTctRVh4dmhveHY1YUhodUVJTi1XNjQiLCAiazV
oeTJyMDE4dnJzSmpvLVZqZDZnNnl0N0Fhb25Lb25uaXVKOXplbDNqbyIsICJxcDdaX0t
5MVlpcDBzWWdETzN6VnVnMk1GdVBOakh4a3NCRG5KWjRhSS1jIl19LCAiX3NkX2FsZyI
6ICJzaGEtMjU2IiwgImNuZiI6IHsiandrIjogeyJrdHkiOiAiRUMiLCAiY3J2IjogIlA
tMjU2IiwgIngiOiAiVENBRVIxOVp2dTNPSEY0ajRXNHZmU1ZvSElQMUlMaWxEbHM3dkN
lR2VtYyIsICJ5IjogIlp4amlXV2JaTVFHSFZXS1ZRNGhiU0lpcnNWZnVlY0NFNnQ0alQ
5RjJIWlEifX19.dwstJbebupjLSYtA3DGJBjcEDnHrftlVJeeIMwkOePBAcIOq5jC3qG
m-yRcXfvzHY6NQPLtwaIZC76V-p-gQeA~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3Iiw
gImdpdmVuX25hbWUiLCAiRXJpa2EiXQ~WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwg
ImZhbWlseV9uYW1lIiwgIk11c3Rlcm1hbm4iXQ~WyI2SWo3dE0tYTVpVlBHYm9TNXRtd
lZBIiwgImJpcnRoZGF0ZSIsICIxOTYzLTA4LTEyIl0~WyJlSThaV205UW5LUHBOUGVOZ
W5IZGhRIiwgInNvdXJjZV9kb2N1bWVudF90eXBlIiwgImlkX2NhcmQiXQ~WyJRZ19PNj
R6cUF4ZTQxMmExMDhpcm9BIiwgInN0cmVldF9hZGRyZXNzIiwgIkhlaWRlc3RyYVx1MD
BkZmUgMTciXQ~WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImxvY2FsaXR5IiwgIkt
cdTAwZjZsbiJd~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgInBvc3RhbF9jb2RlIi
wgIjUxMTQ3Il0~WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImNvdW50cnkiLCAiRE
UiXQ~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImFkZHJlc3MiLCB7Il9zZCI6IFs
iWEZjN3pYUG03enpWZE15d20yRXVCZmxrYTVISHF2ZjhVcF9zek5HcXZpZyIsICJiZDF
FVnpnTm9wVWs0RVczX2VRMm4zX05VNGl1WE9IdjlYYkdITjNnMVRFIiwgImZfRlFZZ3Z
RV3Z5VnFObklYc0FSbE55ZTdZR3A4RTc3Z1JBamFxLXd2bnciLCAidjRra2JfcFAxamx
2VWJTanR5YzVicWNXeUEtaThYTHZoVllZN1pUMHRiMCJdfV0~WyJuUHVvUW5rUkZxM0J
JZUFtN0FuWEZBIiwgIm5hdGlvbmFsaXRpZXMiLCBbIkRFIl1d~WyI1YlBzMUlxdVpOYT
Boa2FGenp6Wk53IiwgImdlbmRlciIsICJmZW1hbGUiXQ~WyI1YTJXMF9OcmxFWnpmcW1
rXzdQcS13IiwgImJpcnRoX2ZhbWlseV9uYW1lIiwgIkdhYmxlciJd~WyJ5MXNWVTV3ZG
ZKYWhWZGd3UGdTN1JRIiwgImxvY2FsaXR5IiwgIkJlcmxpbiJd~WyJIYlE0WDhzclZXM
1FEeG5JSmRxeU9BIiwgInBsYWNlX29mX2JpcnRoIiwgeyJfc2QiOiBbIldwaEhvSUR5b
1diQXBEQzR6YnV3UjQweGwweExoRENfY3Y0dHNTNzFyRUEiXSwgImNvdW50cnkiOiAiR
EUifV0~WyJDOUdTb3VqdmlKcXVFZ1lmb2pDYjFBIiwgImFsc29fa25vd25fYXMiLCAiU
2Nod2VzdGVyIEFnbmVzIl0~WyJreDVrRjE3Vi14MEptd1V4OXZndnR3IiwgIjEyIiwgd
HJ1ZV0~WyJIM28xdXN3UDc2MEZpMnllR2RWQ0VRIiwgIjE0IiwgdHJ1ZV0~WyJPQktsV
FZsdkxnLUFkd3FZR2JQOFpBIiwgIjE2IiwgdHJ1ZV0~WyJNMEpiNTd0NDF1YnJrU3V5c
kRUM3hBIiwgIjE4IiwgdHJ1ZV0~WyJEc210S05ncFY0ZEFIcGpyY2Fvc0F3IiwgIjIxI
iwgdHJ1ZV0~WyJlSzVvNXBIZmd1cFBwbHRqMXFoQUp3IiwgIjY1IiwgZmFsc2Vd~
]]>
</sourcecode>
<t>This is the payload of that SD-JWT:</t>

<sourcecode type="json"><![CDATA[{
  "_sd": [
    "0HZmnSIPz337kSWe7C34l--88gzJi-eBJ2Vz_HJwATg",
    "9ZbplC7TdEW7qal6BBZlMtqJdmeEOiXevdJloXVJdRQ",
    "I00fcFUoDXCucp5yy2ujqPssDVGaWNiUliNz_awD0gc",
    "IEBYSJGNhXIlrQo58ykXm2Zx3yll9ZlTtToPo17QQiY",
    "Lai6IU6d7GQagXR7AvGTrnXgSld3z8EIg_fv3fOZ1Wg",
    "hvDXhwmGcJQsBCA2OtjuLAcwAMpDsaU0nkovcKOqWNE",
    "ikuur8Q4k8q3VcyA7dC-mNjZBkReDTU-CG4niTE7OTU",
    "qvzNLj2vh9o4SEXOfMiYDuvTykdsWCNg0wTdlr0AEIM",
    "wzW15bhCkvksxVvuJ8RF3xi8i64ln1jo_76BC2oa1ug",
    "zOeBXhxvIS4ZzmQcLlxKuEAOGGByjOqa1z2IoVx_YDQ"
  ],
  "iss": "https://example.com/issuer",
  "iat": 1683000000,
  "exp": 1883000000,
  "vct": "https://bmi.bund.example/credential/pid/1.0",
  "age_equal_or_over": {
    "_sd": [
      "Fc8I_07LOcgPwrDJKQyIGO97wVsOplMLjHvRC4R4-Wg",
      "XLtLjadUWc9zN_9hMJRoqy46UsCKb1IshZuuqUFKSCA",
      "aoCCzsC7p4qhZIAh_idRCSCa641uycnc8zPfNWz8nx0",
      "f1-P0A2dKWavv1uFnMX2A7-EXxvhoxv5aHhuEIN-W64",
      "k5hy2r018vrsJjo-Vjd6g6yt7AaonKonniuJ9zel3jo",
      "qp7Z_Ky1Yip0sYgDO3zVug2MFuPNjHxksBDnJZ4aI-c"
    ]
  },
  "_sd_alg": "sha-256",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
]]>
</sourcecode>
<t>The digests in the SD-JWT payload reference the following Disclosures:</t>
<t><strong>Claim <tt>given_name</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>0HZmnSIPz337kSWe7C34l--88gzJi-eBJ2Vz_HJwATg</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiRXJp</tt><br/>
<tt>a2EiXQ</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "given_name", "Erika"]</tt></li>
</ul>
<t><strong>Claim <tt>family_name</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>I00fcFUoDXCucp5yy2ujqPssDVGaWNiUliNz_awD0gc</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIk11</tt><br/>
<tt>c3Rlcm1hbm4iXQ</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "family_name", "Mustermann"]</tt></li>
</ul>
<t><strong>Claim <tt>birthdate</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>Lai6IU6d7GQagXR7AvGTrnXgSld3z8EIg_fv3fOZ1Wg</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImJpcnRoZGF0ZSIsICIxOTYz</tt><br/>
<tt>LTA4LTEyIl0</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "birthdate", "1963-08-12"]</tt></li>
</ul>
<t><strong>Claim <tt>source_document_type</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>qvzNLj2vh9o4SEXOfMiYDuvTykdsWCNg0wTdlr0AEIM</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInNvdXJjZV9kb2N1bWVudF90</tt><br/>
<tt>eXBlIiwgImlkX2NhcmQiXQ</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "source_document_type",</tt><br/>
<tt>"id_card"]</tt></li>
</ul>
<t><strong>Claim <tt>street_address</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>bd1EVzgNopUk4EW3_eQ2n3_NU4iuXOHv9XbGHN3g1TE</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgInN0cmVldF9hZGRyZXNzIiwg</tt><br/>
<tt>IkhlaWRlc3RyYVx1MDBkZmUgMTciXQ</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "street_address",</tt><br/>
<tt>"Heidestra\u00dfe 17"]</tt></li>
</ul>
<t><strong>Claim <tt>locality</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>f_FQYgvQWvyVqNnIXsARlNye7YGp8E77gRAjaq-wvnw</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImxvY2FsaXR5IiwgIktcdTAw</tt><br/>
<tt>ZjZsbiJd</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "locality", "K\u00f6ln"]</tt></li>
</ul>
<t><strong>Claim <tt>postal_code</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>XFc7zXPm7zzVdMywm2EuBflka5HHqvf8Up_szNGqvig</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgInBvc3RhbF9jb2RlIiwgIjUx</tt><br/>
<tt>MTQ3Il0</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", "postal_code", "51147"]</tt></li>
</ul>
<t><strong>Claim <tt>country</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>v4kkb_pP1jlvUbSjtyc5bqcWyA-i8XLvhVYY7ZT0tb0</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImNvdW50cnkiLCAiREUiXQ</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "country", "DE"]</tt></li>
</ul>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>zOeBXhxvIS4ZzmQcLlxKuEAOGGByjOqa1z2IoVx_YDQ</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImFkZHJlc3MiLCB7Il9zZCI6</tt><br/>
<tt>IFsiWEZjN3pYUG03enpWZE15d20yRXVCZmxrYTVISHF2ZjhVcF9zek5HcXZp</tt><br/>
<tt>ZyIsICJiZDFFVnpnTm9wVWs0RVczX2VRMm4zX05VNGl1WE9IdjlYYkdITjNn</tt><br/>
<tt>MVRFIiwgImZfRlFZZ3ZRV3Z5VnFObklYc0FSbE55ZTdZR3A4RTc3Z1JBamFx</tt><br/>
<tt>LXd2bnciLCAidjRra2JfcFAxamx2VWJTanR5YzVicWNXeUEtaThYTHZoVllZ</tt><br/>
<tt>N1pUMHRiMCJdfV0</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "address", {"_sd":</tt><br/>
<tt>["XFc7zXPm7zzVdMywm2EuBflka5HHqvf8Up_szNGqvig",</tt><br/>
<tt>"bd1EVzgNopUk4EW3_eQ2n3_NU4iuXOHv9XbGHN3g1TE",</tt><br/>
<tt>"f_FQYgvQWvyVqNnIXsARlNye7YGp8E77gRAjaq-wvnw",</tt><br/>
<tt>"v4kkb_pP1jlvUbSjtyc5bqcWyA-i8XLvhVYY7ZT0tb0"]}]</tt></li>
</ul>
<t><strong>Claim <tt>nationalities</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>hvDXhwmGcJQsBCA2OtjuLAcwAMpDsaU0nkovcKOqWNE</tt></li>
<li>Disclosure:<br/>
<tt>WyJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiwgIm5hdGlvbmFsaXRpZXMiLCBb</tt><br/>
<tt>IkRFIl1d</tt></li>
<li>Contents:
<tt>["nPuoQnkRFq3BIeAm7AnXFA", "nationalities", ["DE"]]</tt></li>
</ul>
<t><strong>Claim <tt>gender</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>IEBYSJGNhXIlrQo58ykXm2Zx3yll9ZlTtToPo17QQiY</tt></li>
<li>Disclosure:<br/>
<tt>WyI1YlBzMUlxdVpOYTBoa2FGenp6Wk53IiwgImdlbmRlciIsICJmZW1hbGUi</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["5bPs1IquZNa0hkaFzzzZNw", "gender", "female"]</tt></li>
</ul>
<t><strong>Claim <tt>birth_family_name</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>ikuur8Q4k8q3VcyA7dC-mNjZBkReDTU-CG4niTE7OTU</tt></li>
<li>Disclosure:<br/>
<tt>WyI1YTJXMF9OcmxFWnpmcW1rXzdQcS13IiwgImJpcnRoX2ZhbWlseV9uYW1l</tt><br/>
<tt>IiwgIkdhYmxlciJd</tt></li>
<li>Contents:
<tt>["5a2W0_NrlEZzfqmk_7Pq-w", "birth_family_name", "Gabler"]</tt></li>
</ul>
<t><strong>Claim <tt>locality</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>WphHoIDyoWbApDC4zbuwR40xl0xLhDC_cv4tsS71rEA</tt></li>
<li>Disclosure:<br/>
<tt>WyJ5MXNWVTV3ZGZKYWhWZGd3UGdTN1JRIiwgImxvY2FsaXR5IiwgIkJlcmxp</tt><br/>
<tt>biJd</tt></li>
<li>Contents:
<tt>["y1sVU5wdfJahVdgwPgS7RQ", "locality", "Berlin"]</tt></li>
</ul>
<t><strong>Claim <tt>place_of_birth</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>wzW15bhCkvksxVvuJ8RF3xi8i64ln1jo_76BC2oa1ug</tt></li>
<li>Disclosure:<br/>
<tt>WyJIYlE0WDhzclZXM1FEeG5JSmRxeU9BIiwgInBsYWNlX29mX2JpcnRoIiwg</tt><br/>
<tt>eyJfc2QiOiBbIldwaEhvSUR5b1diQXBEQzR6YnV3UjQweGwweExoRENfY3Y0</tt><br/>
<tt>dHNTNzFyRUEiXSwgImNvdW50cnkiOiAiREUifV0</tt></li>
<li>Contents:
<tt>["HbQ4X8srVW3QDxnIJdqyOA", "place_of_birth", {"_sd":</tt><br/>
<tt>["WphHoIDyoWbApDC4zbuwR40xl0xLhDC_cv4tsS71rEA"], "country":</tt><br/>
<tt>"DE"}]</tt></li>
</ul>
<t><strong>Claim <tt>also_known_as</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>9ZbplC7TdEW7qal6BBZlMtqJdmeEOiXevdJloXVJdRQ</tt></li>
<li>Disclosure:<br/>
<tt>WyJDOUdTb3VqdmlKcXVFZ1lmb2pDYjFBIiwgImFsc29fa25vd25fYXMiLCAi</tt><br/>
<tt>U2Nod2VzdGVyIEFnbmVzIl0</tt></li>
<li>Contents:
<tt>["C9GSoujviJquEgYfojCb1A", "also_known_as", "Schwester</tt><br/>
<tt>Agnes"]</tt></li>
</ul>
<t><strong>Claim <tt>12</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>Fc8I_07LOcgPwrDJKQyIGO97wVsOplMLjHvRC4R4-Wg</tt></li>
<li>Disclosure:<br/>
<tt>WyJreDVrRjE3Vi14MEptd1V4OXZndnR3IiwgIjEyIiwgdHJ1ZV0</tt></li>
<li>Contents:
<tt>["kx5kF17V-x0JmwUx9vgvtw", "12", true]</tt></li>
</ul>
<t><strong>Claim <tt>14</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>f1-P0A2dKWavv1uFnMX2A7-EXxvhoxv5aHhuEIN-W64</tt></li>
<li>Disclosure:<br/>
<tt>WyJIM28xdXN3UDc2MEZpMnllR2RWQ0VRIiwgIjE0IiwgdHJ1ZV0</tt></li>
<li>Contents:
<tt>["H3o1uswP760Fi2yeGdVCEQ", "14", true]</tt></li>
</ul>
<t><strong>Claim <tt>16</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>k5hy2r018vrsJjo-Vjd6g6yt7AaonKonniuJ9zel3jo</tt></li>
<li>Disclosure:<br/>
<tt>WyJPQktsVFZsdkxnLUFkd3FZR2JQOFpBIiwgIjE2IiwgdHJ1ZV0</tt></li>
<li>Contents:
<tt>["OBKlTVlvLg-AdwqYGbP8ZA", "16", true]</tt></li>
</ul>
<t><strong>Claim <tt>18</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>qp7Z_Ky1Yip0sYgDO3zVug2MFuPNjHxksBDnJZ4aI-c</tt></li>
<li>Disclosure:<br/>
<tt>WyJNMEpiNTd0NDF1YnJrU3V5ckRUM3hBIiwgIjE4IiwgdHJ1ZV0</tt></li>
<li>Contents:
<tt>["M0Jb57t41ubrkSuyrDT3xA", "18", true]</tt></li>
</ul>
<t><strong>Claim <tt>21</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>aoCCzsC7p4qhZIAh_idRCSCa641uycnc8zPfNWz8nx0</tt></li>
<li>Disclosure:<br/>
<tt>WyJEc210S05ncFY0ZEFIcGpyY2Fvc0F3IiwgIjIxIiwgdHJ1ZV0</tt></li>
<li>Contents:
<tt>["DsmtKNgpV4dAHpjrcaosAw", "21", true]</tt></li>
</ul>
<t><strong>Claim <tt>65</tt></strong>:</t>

<ul spacing="compact">
<li>SHA-256 Hash: <tt>XLtLjadUWc9zN_9hMJRoqy46UsCKb1IshZuuqUFKSCA</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSzVvNXBIZmd1cFBwbHRqMXFoQUp3IiwgIjY1IiwgZmFsc2Vd</tt></li>
<li>Contents:
<tt>["eK5o5pHfgupPpltj1qhAJw", "65", false]</tt></li>
</ul>
<t>This shows a presentation of the SD-JWT with a Key Binding JWT that discloses only nationality and the fact that the person is over 18 years old:</t>

<sourcecode type="txt"><![CDATA[eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJfc2QiOiBbIjBIWm1
uU0lQejMzN2tTV2U3QzM0bC0tODhnekppLWVCSjJWel9ISndBVGciLCAiOVpicGxDN1R
kRVc3cWFsNkJCWmxNdHFKZG1lRU9pWGV2ZEpsb1hWSmRSUSIsICJJMDBmY0ZVb0RYQ3V
jcDV5eTJ1anFQc3NEVkdhV05pVWxpTnpfYXdEMGdjIiwgIklFQllTSkdOaFhJbHJRbzU
4eWtYbTJaeDN5bGw5WmxUdFRvUG8xN1FRaVkiLCAiTGFpNklVNmQ3R1FhZ1hSN0F2R1R
yblhnU2xkM3o4RUlnX2Z2M2ZPWjFXZyIsICJodkRYaHdtR2NKUXNCQ0EyT3RqdUxBY3d
BTXBEc2FVMG5rb3ZjS09xV05FIiwgImlrdXVyOFE0azhxM1ZjeUE3ZEMtbU5qWkJrUmV
EVFUtQ0c0bmlURTdPVFUiLCAicXZ6TkxqMnZoOW80U0VYT2ZNaVlEdXZUeWtkc1dDTmc
wd1RkbHIwQUVJTSIsICJ3elcxNWJoQ2t2a3N4VnZ1SjhSRjN4aThpNjRsbjFqb183NkJ
DMm9hMXVnIiwgInpPZUJYaHh2SVM0WnptUWNMbHhLdUVBT0dHQnlqT3FhMXoySW9WeF9
ZRFEiXSwgImlzcyI6ICJodHRwczovL2V4YW1wbGUuY29tL2lzc3VlciIsICJpYXQiOiA
xNjgzMDAwMDAwLCAiZXhwIjogMTg4MzAwMDAwMCwgInZjdCI6ICJodHRwczovL2JtaS5
idW5kLmV4YW1wbGUvY3JlZGVudGlhbC9waWQvMS4wIiwgImFnZV9lcXVhbF9vcl9vdmV
yIjogeyJfc2QiOiBbIkZjOElfMDdMT2NnUHdyREpLUXlJR085N3dWc09wbE1Makh2UkM
0UjQtV2ciLCAiWEx0TGphZFVXYzl6Tl85aE1KUm9xeTQ2VXNDS2IxSXNoWnV1cVVGS1N
DQSIsICJhb0NDenNDN3A0cWhaSUFoX2lkUkNTQ2E2NDF1eWNuYzh6UGZOV3o4bngwIiw
gImYxLVAwQTJkS1dhdnYxdUZuTVgyQTctRVh4dmhveHY1YUhodUVJTi1XNjQiLCAiazV
oeTJyMDE4dnJzSmpvLVZqZDZnNnl0N0Fhb25Lb25uaXVKOXplbDNqbyIsICJxcDdaX0t
5MVlpcDBzWWdETzN6VnVnMk1GdVBOakh4a3NCRG5KWjRhSS1jIl19LCAiX3NkX2FsZyI
6ICJzaGEtMjU2IiwgImNuZiI6IHsiandrIjogeyJrdHkiOiAiRUMiLCAiY3J2IjogIlA
tMjU2IiwgIngiOiAiVENBRVIxOVp2dTNPSEY0ajRXNHZmU1ZvSElQMUlMaWxEbHM3dkN
lR2VtYyIsICJ5IjogIlp4amlXV2JaTVFHSFZXS1ZRNGhiU0lpcnNWZnVlY0NFNnQ0alQ
5RjJIWlEifX19.dwstJbebupjLSYtA3DGJBjcEDnHrftlVJeeIMwkOePBAcIOq5jC3qG
m-yRcXfvzHY6NQPLtwaIZC76V-p-gQeA~WyJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiw
gIm5hdGlvbmFsaXRpZXMiLCBbIkRFIl1d~WyJNMEpiNTd0NDF1YnJrU3V5ckRUM3hBIi
wgIjE4IiwgdHJ1ZV0~eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImtiK2p3dCJ9.eyJub
25jZSI6ICIxMjM0NTY3ODkwIiwgImF1ZCI6ICJodHRwczovL2V4YW1wbGUuY29tL3Zlc
mlmaWVyIiwgImlhdCI6IDE3MzE1MzA3MDQsICJzZF9oYXNoIjogIkhNMnJBQ0twT2ZnU
HNRQ084bGR3ZmhKY0YtRmhNMzdXS2daY0twM1FlWlUifQ.hgHEKOoBiTJI7rqlTzpfxp
iRjBXTiqAYKC-BnOEd3e7zB0TWJ1kDg2Ecl6WJQ0wgNDaJinxDwkNJGTgeL6VlQw
]]>
</sourcecode>
<t>The following is the payload of a corresponding Key Binding JWT:</t>

<sourcecode type="json"><![CDATA[{
  "nonce": "1234567890",
  "aud": "https://example.com/verifier",
  "iat": 1731530704,
  "sd_hash": "HM2rACKpOfgPsQCO8ldwfhJcF-FhM37WKgZcKp3QeZU"
}
]]>
</sourcecode>
<t>After validation, the Verifier will have the following processed SD-JWT payload available for further handling:</t>

<sourcecode type="json"><![CDATA[{
  "iss": "https://example.com/issuer",
  "iat": 1683000000,
  "exp": 1883000000,
  "vct": "https://bmi.bund.example/credential/pid/1.0",
  "age_equal_or_over": {
    "18": true
  },
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  },
  "nationalities": [
    "DE"
  ]
}
]]>
</sourcecode>
</section>

<section anchor="ExampleTypeMetadata"><name>Example 2: Type Metadata</name>

<sourcecode type="json"><![CDATA[{
  "vct": "https://betelgeuse.example.com/education_credential",
  "name": "Betelgeuse Education Credential - Preliminary Version",
  "description": "This is our development version of the education credential. Don't panic.",
  "extends": "https://galaxy.example.com/galactic-education-credential-0.9",
  "extends#integrity": "sha256-9cLlJNXN-TsMk-PmKjZ5t0WRL5ca_xGgX3c1VLmXfh-WRL5",
  "display": [
    {
      "lang": "en-US",
      "name": "Betelgeuse Education Credential",
      "description": "An education credential for all carbon-based life forms on Betelgeusians",
      "rendering": {
        "simple": {
          "logo": {
            "uri": "https://betelgeuse.example.com/public/education-logo.png",
            "uri#integrity": "sha256-LmXfh-9cLlJNXN-TsMk-PmKjZ5t0WRL5ca_xGgX3c1V",
            "alt_text": "Betelgeuse Ministry of Education logo"
          },
          "background_color": "#12107c",
          "text_color": "#FFFFFF"
        },
        "svg_templates": [
          {
            "uri": "https://betelgeuse.example.com/public/credential-english.svg",
            "uri#integrity": "sha256-8cLlJNXN-TsMk-PmKjZ5t0WRL5ca_xGgX3c1VLmXfh-9c",
            "properties": {
              "orientation": "landscape",
              "color_scheme": "light",
              "contrast": "high"
            }
          }
        ]
      }
    },
    {
      "lang": "de-DE",
      "name": "Betelgeuse-Bildungsnachweis",
      "rendering": {
        "simple": {
          "logo": {
            "uri": "https://betelgeuse.example.com/public/education-logo-de.png",
            "uri#integrity": "sha256-LmXfh-9cLlJNXN-TsMk-PmKjZ5t0WRL5ca_xGgX3c1V",
            "alt_text": "Logo des Betelgeusischen Bildungsministeriums"
          },
          "background_color": "#12107c",
          "text_color": "#FFFFFF"
        },
        "svg_templates": [
          {
            "uri": "https://betelgeuse.example.com/public/credential-german.svg",
            "uri#integrity": "sha256-8cLlJNXN-TsMk-PmKjZ5t0WRL5ca_xGgX3c1VLmXfh-9c",
            "properties": {
              "orientation": "landscape",
              "color_scheme": "light",
              "contrast": "high"
            }
          }
        ]
      }
    }
  ],
  "claims": [
    {
      "path": ["name"],
      "display": [
        {
          "lang": "de-DE",
          "label": "Vor- und Nachname",
          "description": "Der Name des Studenten"
        },
        {
          "lang": "en-US",
          "label": "Name",
          "description": "The name of the student"
        }
      ],
      "sd": "allowed"
    },
    {
      "path": ["address"],
      "display": [
        {
          "lang": "de-DE",
          "label": "Adresse",
          "description": "Adresse zum Zeitpunkt des Abschlusses"
        },
        {
          "lang": "en-US",
          "label": "Address",
          "description": "Address at the time of graduation"
        }
      ],
      "sd": "always"
    },
    {
      "path": ["address", "street_address"],
      "display": [
        {
          "lang": "de-DE",
          "label": "Straße"
        },
        {
          "lang": "en-US",
          "label": "Street Address"
        }
      ],
      "sd": "always",
      "svg_id": "address_street_address"
    },
    {
      "path": ["degrees", null],
      "display": [
        {
          "lang": "de-DE",
          "label": "Abschluss",
          "description": "Der Abschluss des Studenten"
        },
        {
          "lang": "en-US",
          "label": "Degree",
          "description": "Degree earned by the student"
        }
      ],
      "sd": "allowed"
    }
  ],
  "schema_url": "https://exampleuniversity.com/public/credential-schema-0.9",
  "schema_url#integrity": "sha256-o984vn819a48ui1llkwPmKjZ5t0WRL5ca_xGgX3c1VLmXfh"
}
]]>
</sourcecode>
</section>
</section>

<section anchor="Acknowledgements"><name>Acknowledgements</name>
<t>We would like to thank
Alen Horvat,
Andres Uribe,
Christian Bormann,
Giuseppe De Marco,
Lukas J Han,
Leif Johansson,
Michael B. Jones,
Mike Prorock,
Orie Steele,
Paul Bastian,
Torsten Lodderstedt,
Tobias Looker, and
Kristina Yasuda
for their contributions (some of which substantial) to this draft and to the initial set of implementations.</t>
</section>

<section anchor="document-history"><name>Document History</name>
<t>-06</t>

<ul spacing="compact">
<li>Update the anticipated media type registration request from <tt>application/vc+sd-jwt</tt> to <tt>application/dc+sd-jwt</tt></li>
<li>Tightened the exposition of the Issuer-signed JWT Verification Key Validation section</li>
<li>Add the “Status” field for the well-known URI registration per IANA early review</li>
</ul>
<t>-05</t>

<ul spacing="compact">
<li>Include display and claim type metadata</li>
<li>Added example for type metadata</li>
<li>Clarify, add context, or otherwise improved the examples</li>
</ul>
<t>-04</t>

<ul spacing="compact">
<li>update reference to IETF Status List</li>
<li>Include Type Metadata</li>
<li>Include schema Type Metadata</li>
<li>Editorial changes</li>
<li>Updated terminology to clarify digital signatures are one way to secure VCs and presentations</li>
<li>Rework key resolution/validation for x5c</li>
</ul>
<t>-03</t>

<ul spacing="compact">
<li>Include disclosure of age_equal_or_over/18 in the PID example</li>
</ul>
<t>-02</t>

<ul spacing="compact">
<li>Made specific rules for public verification key validation conditional</li>
<li>Finetuned rules for obtaining public verification key</li>
<li>Editorial changes</li>
<li>added Brian Campbell as co-author</li>
<li>Renamed JWT Issuer Metadata to JWT VC Issuer Metadata</li>
<li>'iat' is now optional and allowed to be selectively disclosable</li>
<li>Fix inconstancy in the .well-known path construction</li>
<li>Added registration request to IANA for the well-known URI</li>
<li>Fix some formatting and text in the media type and JWT claim registration requests</li>
<li>Clarify the optionality of the <tt>cnf</tt> claim</li>
<li>Added relationships to other documents</li>
<li>Added PID example</li>
</ul>
<t>-01</t>

<ul spacing="compact">
<li>Introduce rules for type identifiers (Collision-Resistant Name)</li>
<li>Rename <tt>type</tt> to <tt>vct</tt></li>
<li>Removed duplicated and inconsistent requirements on KB-JWT</li>
<li>Editorial changes</li>
<li>Added issuer public verification key discovery section.</li>
</ul>
<t>-00</t>

<ul spacing="compact">
<li>Upload as draft-ietf-oauth-sd-jwt-vc-00</li>
<li>Aligned terminology and descriptions with latest version of SD-JWT</li>
</ul>
<t>[[ pre Working Group Adoption: ]]</t>
<t>-00</t>

<ul spacing="compact">
<li>Initial Version</li>
<li>Removed W3C VCDM transformation algorithm</li>
<li>Various editorial changes based on feedback</li>
<li>Adjusted terminology based on feedback</li>
<li>Added non-selectively disclosable JWT VC</li>
<li>Added a note that this is not W3C VCDM</li>
</ul>
</section>

</back>

</rfc>
