From 632ef1a5acbfe6008fe65d3ec27d1c4edffe759c Mon Sep 17 00:00:00 2001 From: Benjamin Young Date: Mon, 24 Nov 2025 15:09:34 -0500 Subject: [PATCH 1/6] Add comments to sections; helps while editing. This is especially useful when folding/collapsing sections in an editor that supports that. --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index ebd66e1..bb25eb6 100644 --- a/index.html +++ b/index.html @@ -302,7 +302,7 @@

The `renderMethod` Property

-
+

TemplateRenderMethod

@@ -463,7 +463,7 @@

TemplateRenderMethod

information from the [=verifiable credential=] listed in `renderProperty`.

-
+

The `svg-mustache` Render Suite

The `svg-mustache` render suite uses the Mustache templating language to @@ -531,7 +531,7 @@

The `svg-mustache` Render Suite

-
+

The `pdf-mustache` Render Suite

The `pdf-mustache` render suite uses the Mustache templating language to From da4da7428b5bc1e495b27dcb98df0c76d01f4056 Mon Sep 17 00:00:00 2001 From: Benjamin Young Date: Mon, 24 Nov 2025 15:11:14 -0500 Subject: [PATCH 2/6] Add `RenderMethod` section; move `nfc` there. This also introduces the concept of `modality` which may be useful for other types of render methods. --- index.html | 133 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 123 insertions(+), 10 deletions(-) diff --git a/index.html b/index.html index bb25eb6..04ec5db 100644 --- a/index.html +++ b/index.html @@ -598,17 +598,126 @@

The `pdf-mustache` Render Suite

+
+ +
+

RenderMethod

+ +

+In situations where templating is not required, an [=issuer=] can provide a +predetermined payload to be displayed, transmitted, or otherwise rendered. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +An OPTIONAL [=string=] that follows the [[[URL]]] and, when fetched, +dereferences to a render template. +
type +A REQUIRED [=string=] that MUST be the value `RenderMethod`. +
modality +A REQUIRED [=string=] that identifies the mode by which the payload will be +transmitted or rendered. Possible examples of modalities may include `nfc`, +`qr-code`, `audio`, and `braille`. + + +
name +An OPTIONAL human-readable [=string=] that can be displayed to provide a hint to +the type of rendering that will be performed. This property might be used in a +graphical interface that enables an individual to select between multiple +presentation modes. +
description +An OPTIONAL human-readable [=string=] that provides a more involved description +than `name` of when the particular rendering might be useful. +
payload +An OPTIONAL [=string=] or [=ordered map|map=] that provides the raw data that +will be used for rendering. If the value is a [=string=], it MUST be +a URL. If the value is a [=ordered map|map=], it MUST conform to the following +rules: + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +An REQUIRED [=string=] that follows the [[[URL]]] and, when fetched, +dereferences to a template such as an SVG or PDF file. +
mediaType +A RECOMMENDED [=string=] that identifies the media type for the `id` value +as specified in [[[RFC6838]]]. +
digestMultibase +An OPTIONAL multibase-encoded Multihash of the template file. The multibase +value MUST be `u` (base64url-nopad) and the multihash value MUST be SHA-2 with +256-bits of output (`0x12`). +
+
digestMultibase +An OPTIONAL multibase-encoded Multihash of the render method referenced if `id` +is specified. The multibase value MUST be `u` (base64url-nopad) and the multihash +value MUST be SHA-2 with 256-bits of output (`0x12`). +
+
-

The `nfc` Render Suite

+

The `nfc` Render Modality

-The `nfc` render suite transmits a binary payload representing the +The `nfc` render modality transmits a binary payload representing the [=verifiable credential=] over a wireless NFC connection.

-In the example below, a fully embedded NFC payload is used as the rendering -template, which only discloses the barcode identifier associated with the -credential. +In the example below, a fully embedded NFC payload is used.

The `nfc` Render Suite
 {
   ...
   "renderMethod": {
-    "type": "TemplateRenderMethod",
-    "renderSuite": "nfc",
+    "type": "RenderMethod",
+    "modality": "nfc",
     "name": "Tap to send",
     // the NFC payload is embedded
-    "template": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw",
-    // only the barcode is transmitted over NFC
-    "renderProperty": ["/credentialSubject/barcode"]
+    "payload": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw"
   }
   
 }
         
+ +
From 5022ab99c9cd59286ffc0a0a31e140a61db96703 Mon Sep 17 00:00:00 2001 From: Benjamin Young Date: Tue, 2 Dec 2025 11:52:45 -0500 Subject: [PATCH 3/6] Move RenderMethod up in prep to base class it. --- index.html | 288 ++++++++++++++++++++++++++--------------------------- 1 file changed, 144 insertions(+), 144 deletions(-) diff --git a/index.html b/index.html index 04ec5db..5594f78 100644 --- a/index.html +++ b/index.html @@ -302,6 +302,150 @@

The `renderMethod` Property

+
+

RenderMethod

+ +

+In situations where templating is not required, an [=issuer=] can provide a +predetermined payload to be displayed, transmitted, or otherwise rendered. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +An OPTIONAL [=string=] that follows the [[[URL]]] and, when fetched, +dereferences to a render template. +
type +A REQUIRED [=string=] that MUST be the value `RenderMethod`. +
modality +A REQUIRED [=string=] that identifies the mode by which the payload will be +transmitted or rendered. Possible examples of modalities may include `nfc`, +`qr-code`, `audio`, and `braille`. + + +
name +An OPTIONAL human-readable [=string=] that can be displayed to provide a hint to +the type of rendering that will be performed. This property might be used in a +graphical interface that enables an individual to select between multiple +presentation modes. +
description +An OPTIONAL human-readable [=string=] that provides a more involved description +than `name` of when the particular rendering might be useful. +
payload +An OPTIONAL [=string=] or [=ordered map|map=] that provides the raw data that +will be used for rendering. If the value is a [=string=], it MUST be +a URL. If the value is a [=ordered map|map=], it MUST conform to the following +rules: + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
id +An REQUIRED [=string=] that follows the [[[URL]]] and, when fetched, +dereferences to a template such as an SVG or PDF file. +
mediaType +A RECOMMENDED [=string=] that identifies the media type for the `id` value +as specified in [[[RFC6838]]]. +
digestMultibase +An OPTIONAL multibase-encoded Multihash of the template file. The multibase +value MUST be `u` (base64url-nopad) and the multihash value MUST be SHA-2 with +256-bits of output (`0x12`). +
+
digestMultibase +An OPTIONAL multibase-encoded Multihash of the render method referenced if `id` +is specified. The multibase value MUST be `u` (base64url-nopad) and the multihash +value MUST be SHA-2 with 256-bits of output (`0x12`). +
+ +
+

The `nfc` Render Modality

+

+The `nfc` render modality transmits a binary payload representing the +[=verifiable credential=] over a wireless NFC connection. +

+ +

+In the example below, a fully embedded NFC payload is used. +

+ +
+{
+  ...
+  "renderMethod": {
+    "type": "RenderMethod",
+    "modality": "nfc",
+    "name": "Tap to send",
+    // the NFC payload is embedded
+    "payload": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw"
+  }
+  
+}
+          
+ + + +
+
+

TemplateRenderMethod

@@ -600,150 +744,6 @@

The `pdf-mustache` Render Suite

-
-

RenderMethod

- -

-In situations where templating is not required, an [=issuer=] can provide a -predetermined payload to be displayed, transmitted, or otherwise rendered. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
id -An OPTIONAL [=string=] that follows the [[[URL]]] and, when fetched, -dereferences to a render template. -
type -A REQUIRED [=string=] that MUST be the value `RenderMethod`. -
modality -A REQUIRED [=string=] that identifies the mode by which the payload will be -transmitted or rendered. Possible examples of modalities may include `nfc`, -`qr-code`, `audio`, and `braille`. - - -
name -An OPTIONAL human-readable [=string=] that can be displayed to provide a hint to -the type of rendering that will be performed. This property might be used in a -graphical interface that enables an individual to select between multiple -presentation modes. -
description -An OPTIONAL human-readable [=string=] that provides a more involved description -than `name` of when the particular rendering might be useful. -
payload -An OPTIONAL [=string=] or [=ordered map|map=] that provides the raw data that -will be used for rendering. If the value is a [=string=], it MUST be -a URL. If the value is a [=ordered map|map=], it MUST conform to the following -rules: - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
id -An REQUIRED [=string=] that follows the [[[URL]]] and, when fetched, -dereferences to a template such as an SVG or PDF file. -
mediaType -A RECOMMENDED [=string=] that identifies the media type for the `id` value -as specified in [[[RFC6838]]]. -
digestMultibase -An OPTIONAL multibase-encoded Multihash of the template file. The multibase -value MUST be `u` (base64url-nopad) and the multihash value MUST be SHA-2 with -256-bits of output (`0x12`). -
-
digestMultibase -An OPTIONAL multibase-encoded Multihash of the render method referenced if `id` -is specified. The multibase value MUST be `u` (base64url-nopad) and the multihash -value MUST be SHA-2 with 256-bits of output (`0x12`). -
- -
-

The `nfc` Render Modality

-

-The `nfc` render modality transmits a binary payload representing the -[=verifiable credential=] over a wireless NFC connection. -

- -

-In the example below, a fully embedded NFC payload is used. -

- -
-{
-  ...
-  "renderMethod": {
-    "type": "RenderMethod",
-    "modality": "nfc",
-    "name": "Tap to send",
-    // the NFC payload is embedded
-    "payload": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw"
-  }
-  
-}
-        
- - - -
-
-

OpenAttestationEmbeddedRenderer

From 55e583d75925ea04ab89fb039b23abc46d091a27 Mon Sep 17 00:00:00 2001 From: Benjamin Young Date: Tue, 2 Dec 2025 11:58:26 -0500 Subject: [PATCH 4/6] Redescribe RenderMethod in base class terms. --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 5594f78..741315d 100644 --- a/index.html +++ b/index.html @@ -306,8 +306,8 @@

The `renderMethod` Property

RenderMethod

-In situations where templating is not required, an [=issuer=] can provide a -predetermined payload to be displayed, transmitted, or otherwise rendered. +The `RenderMethod` base class can be used to provide a predetermined payload to +be displayed, transmitted, or otherwise rendered when templating is not required.

From f53a489adb380258e8fe6fee8a41946420ea3673 Mon Sep 17 00:00:00 2001 From: Benjamin Young Date: Tue, 2 Dec 2025 11:58:59 -0500 Subject: [PATCH 5/6] Move `renderProperty` up into base class. Useful for signaling what is to be shared via the render method. --- index.html | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/index.html b/index.html index 741315d..8669c09 100644 --- a/index.html +++ b/index.html @@ -400,6 +400,16 @@

RenderMethod

+ + renderProperty + +An OPTIONAL [=list=] of [=string=] values that each conform to the +[[[RFC6901]]] syntax that specifies which properties from the [=verifiable +credential=] are exposed when using this specific render method. If +`renderProperty` is not provided, the entire [=verifiable credential=] is +presumed to be shared when the render method is used. + + digestMultibase @@ -499,16 +509,6 @@

TemplateRenderMethod

than `name` of when the particular rendering might be useful. - - renderProperty - -An OPTIONAL [=list=] of [=string=] values that each conform to the -[[[RFC6901]]] syntax that specifies which properties from the [=verifiable -credential=] are exposed when using this specific render method. If -`renderProperty` is not provided, the entire [=verifiable credential=] is -presumed to be shared when the render method is used. - - template From a477a13d357a383af4386f73d37394e80d89164f Mon Sep 17 00:00:00 2001 From: Benjamin Young Date: Tue, 2 Dec 2025 13:09:47 -0500 Subject: [PATCH 6/6] Remove base class properties; use `payload`. The goal is to have a single term for both static and pre-processed content provided in the render method. --- index.html | 100 +++++------------------------------------------------ 1 file changed, 9 insertions(+), 91 deletions(-) diff --git a/index.html b/index.html index 8669c09..f25d649 100644 --- a/index.html +++ b/index.html @@ -461,8 +461,9 @@

TemplateRenderMethod

When an [=issuer=] desires to specify template-based rendering instructions -for a [=verifiable credential=], they MAY add a `renderMethod` property that uses -the data model described below. +for a [=verifiable credential=], they MAY add a `renderMethod` property using +the `TemplateRenderMethod` class on the base data model adding additional +processing instructions as described below.

@@ -473,19 +474,6 @@

TemplateRenderMethod

- - - - - - - - - - - - - - - - - - - - - - - -
id -An OPTIONAL [=string=] that follows the [[[URL]]] and, when fetched, -dereferences to a render template. -
type -A REQUIRED [=string=] that MUST be the value `TemplateRenderMethod`. -
renderSuite @@ -493,81 +481,11 @@

TemplateRenderMethod

generating the concrete rendering.
name -An OPTIONAL human-readable [=string=] that can be displayed to provide a hint to -the type of rendering that will be performed. This property might be used in a -graphical interface that enables an individual to select between multiple -presentation modes. -
description -An OPTIONAL human-readable [=string=] that provides a more involved description -than `name` of when the particular rendering might be useful. -
template -An OPTIONAL [=string=] or [=ordered map|map=] that provides the template that -will be used to perform the rendering. If the value is a [=string=], it MUST be -a URL. If the value is a [=ordered map|map=], it MUST conform to the following -rules: - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
id -An REQUIRED [=string=] that follows the [[[URL]]] and, when fetched, -dereferences to a template such as an SVG or PDF file. -
mediaType -A RECOMMENDED [=string=] that identifies the media type for the `id` value -as specified in [[[RFC6838]]]. -
digestMultibase -An OPTIONAL multibase-encoded Multihash of the template file. The multibase -value MUST be `u` (base64url-nopad) and the multihash value MUST be SHA-2 with -256-bits of output (`0x12`). -
-
digestMultibase -An OPTIONAL multibase-encoded Multihash of the render method referenced if `id` -is specified. The multibase value MUST be `u` (base64url-nopad) and the multihash -value MUST be SHA-2 with 256-bits of output (`0x12`). -
-

-The data model shown above is expressed in a [=verifiable credential=] -in the example below. -

-
+          title="Usage of the renderSuite property by an issuer">
 {
   "@context": [
     "https://www.w3.org/ns/credentials/v2",
@@ -588,7 +506,7 @@ 

TemplateRenderMethod

"renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "svg-mustache", - "template": { + "payload": { "id": "https://example.edu/credential-templates/BachelorDegree", "mediaType": "image/svg+xml", "digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR", @@ -628,7 +546,7 @@

The `svg-mustache` Render Suite

"type": "TemplateRenderMethod", "renderSuite": "svg-mustache", // the SVG file is embedded in the VC - "template": "data:image/svg+xml;base64,Qjei89...3jZpW" + "payload": "data:image/svg+xml;base64,Qjei89...3jZpW" } }
@@ -645,7 +563,7 @@

The `svg-mustache` Render Suite

"renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "svg-mustache", - "template": { + "payload": { // this SVG file is fetched from the Web "id": "https://degree.example/credential-templates/bachelors", "mediaType": "image/svg+xml", @@ -696,7 +614,7 @@

The `pdf-mustache` Render Suite

"type": "TemplateRenderMethod", "renderSuite": "pdf-mustache", // this PDF file is embedded in the VC - "template": "data:application/pdf;base64,k309SK...pwK83b" + "payload": "data:application/pdf;base64,k309SK...pwK83b" } } @@ -713,7 +631,7 @@

The `pdf-mustache` Render Suite

"renderMethod": { "type": "TemplateRenderMethod", "renderSuite": "pdf-mustache", - "template": { + "payload": { // this PDF file is fetched from the Web "id": "https://degree.example/bachelors.pdf", "mediaType": "application/pdf",