Skip to content

[WIP] Initial documentation#9

Draft
anagoessens wants to merge 1 commit intomainfrom
initial_setup
Draft

[WIP] Initial documentation#9
anagoessens wants to merge 1 commit intomainfrom
initial_setup

Conversation

@anagoessens
Copy link

The PR contains an error in types>validator.ts

image

Some of the content is not final yet, this PR is intended to enable @TimoGlastra to start giving feedback while I finish the PR.

Signed-off-by: Ana Goessens <ana@animo.id>
@anagoessens anagoessens marked this pull request as draft February 3, 2026 20:22
Copy link
Member

@TimoGlastra TimoGlastra left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I started reviewing the integration with a wallet. But it's better I just edit this locally. For most things we can just point to HAIP now.

You can apply my suggestions, but I will do the other work in a follow up PR

Comment on lines +6 to +16
| | Supports | Notes |
| :------------ | :---------: | ----------: |
| EUDI Credential formats | SD-JWT VC | |
| | ISO 18013-5 mDoc | |
| OpenID4VCI | 1.0 | |
| OpenID4VCP | 1.0 | |
| Authorization code flows | Presentation during issuance | |
| | Sign in | |
| | Transaction code | |
| Deferred Issuance| ✔️ | |
| Digital Credentials API| ✔️ | Only using OpenID4VP on Android |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| | Supports | Notes |
| :------------ | :---------: | ----------: |
| EUDI Credential formats | SD-JWT VC | |
| | ISO 18013-5 mDoc | |
| OpenID4VCI | 1.0 | |
| OpenID4VCP | 1.0 | |
| Authorization code flows | Presentation during issuance | |
| | Sign in | |
| | Transaction code | |
| Deferred Issuance| ✔️ | |
| Digital Credentials API| ✔️ | Only using OpenID4VP on Android |
| | Supports | Notes |
|--:-----------------------|--:-:-------------------------|--:----------------------------------|
| EUDI Credential formats | SD-JWT VC | |
| | ISO 18013-5 mDoc | |
| OpenID4VCI | 1.0 | |
| OpenID4VCP | 1.0 | |
| Authorization code flows | Presentation during issuance | Legacy flow based on SPRIN-D design |
| | Sign in | |
| | Transaction code | |
| Deferred Issuance | ✔️ | |
| Digital Credentials API | ✔️ | Only using OpenID4VP on Android |

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd also add a section to this page that can track e.g. ETSI/ARF standards. But we can add this later as well


# Install the wallet

This page describes how to integrate with and use the **[Public Beta](todo:add)** of the Paradym Wallet, which supports experimental features and is used in several EU Pilots. The public, stable, version of the Paradym Wallet can be found in [app stores](https://paradym.id/products/paradym-mobile-wallet).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why todo:add, you add the link below?


This is your guide to the Paradym EUDI Wallet 🇪🇺.

The Paradym Wallet is the identity wallet companion to the [Paradym](https://paradym.id/) digital identity platform, which handles issuance, verification and trust management for Relying Parties. This site describes how to integrate with and use the **[Public Beta](todo:add)** of the Paradym Wallet, which supports experimental features and is used in several EU Pilots.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd link to the install page here for the todo:add

This page features a collection of video's to demonstrate EUDI flows.

- [Paradym Wallet Feature Playlist](https://www.youtube.com/watch?v=koetZfHSvKY&list=PLopHpZBbk8wN5xHgqSCncUZ4wy7cblu4A)
- [Paradym Wallet & French National Playground ](https://youtu.be/BkWGGCjuW4U?si=09a-1jq711NBbiTR). Demo showing the Paradym wallet working with the web verifier from the French National playground.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- [Paradym Wallet & French National Playground ](https://youtu.be/BkWGGCjuW4U?si=09a-1jq711NBbiTR). Demo showing the Paradym wallet working with the web verifier from the French National playground.
- [Paradym Wallet & French National Playground](https://youtu.be/BkWGGCjuW4U?si=09a-1jq711NBbiTR). Demo showing the Paradym wallet working with the web verifier from the French National playground.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should record some new flows for the french wallet integration, and the payments

Comment on lines +5 to +10
| For | Go to |
| :------------ | :---------: |
| Talking to the team | Join our [weekly open call](#weekly-open-call). |
| Raising a public issue or technical discussion | Create an issue on the [GitHub repository](https://github.com/animo/paradym-wallet). Issues are public, enabling anyone to see current issues and their status. |
| Raising a private issue | [Email us](mailto:ana@animo.id). Please put 'EUDI Wallet' and other helpful information like your pilot project and/or working group in subject email. |
| Discussing your project | Post in the #paradym-wallet channel in the [Paradym Community Slack](https://join.slack.com/t/paradymgroup/shared_invite/zt-225avbgsm-LXzkDdLV59cJ5v76Xu9y5A) |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very hard to read unformatted tables

Suggested change
| For | Go to |
| :------------ | :---------: |
| Talking to the team | Join our [weekly open call](#weekly-open-call). |
| Raising a public issue or technical discussion | Create an issue on the [GitHub repository](https://github.com/animo/paradym-wallet). Issues are public, enabling anyone to see current issues and their status. |
| Raising a private issue | [Email us](mailto:ana@animo.id). Please put 'EUDI Wallet' and other helpful information like your pilot project and/or working group in subject email. |
| Discussing your project | Post in the #paradym-wallet channel in the [Paradym Community Slack](https://join.slack.com/t/paradymgroup/shared_invite/zt-225avbgsm-LXzkDdLV59cJ5v76Xu9y5A) |
| For | Go to |
|-:----------------------------------------------|-:-:-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Talking to the team | Join our [weekly open call](#weekly-open-call). |
| Raising a public issue or technical discussion | Create an issue on the [GitHub repository](https://github.com/animo/paradym-wallet). Issues are public, enabling anyone to see current issues and their status. |
| Raising a private issue | [Email us](mailto:ana@animo.id). Please put 'EUDI Wallet' and other helpful information like your pilot project and/or working group in subject email. |
| Discussing your project | Post in the #paradym-wallet channel in the [Paradym Community Slack](https://join.slack.com/t/paradymgroup/shared_invite/zt-225avbgsm-LXzkDdLV59cJ5v76Xu9y5A) |




When using DCQL, the request should include a DCQL Query (dcql_query) property. The response will include only a vp_token. The gist linked above contains example structures for different possible queries.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
When using DCQL, the request should include a DCQL Query (dcql_query) property. The response will include only a vp_token. The gist linked above contains example structures for different possible queries.
When using DCQL, the request should include a DCQL Query (dcql_query) property.


When using DCQL, the request should include a DCQL Query (dcql_query) property. The response will include only a vp_token. The gist linked above contains example structures for different possible queries.

DCQL is an alternative to presentation definition and newer method to specify which credentials to request from the wallet. DCQL generally provides a simpler structure, and will probably fully replace presentation definition. You should use either DCQL or presentation definition, not both.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
DCQL is an alternative to presentation definition and newer method to specify which credentials to request from the wallet. DCQL generally provides a simpler structure, and will probably fully replace presentation definition. You should use either DCQL or presentation definition, not both.

Comment on lines +77 to +107
{
"id": "pid_sd_jwt",
"format": "vc+sd-jwt",
"meta": {
"vct_values": [
"https://demo.pid-issuer.bundesdruckerei.de/credentials/pid/1.0",
"https://example.bmi.bund.de/credential/pid/1.0",
"urn:eu.europa.ec.eudi:pid:1"
]
},
"claims": [
{
"path": ["given_name"]
},
{
"path": ["family_name"]
},
{
"path": ["age_equal_or_over", "21"],
"values": [true]
},
{
"path": ["iss"],
"values": [
"https://demo.pid-issuer.bundesdruckerei.de/c",
"https://demo.pid-issuer.bundesdruckerei.de/c1",
"https://demo.pid-issuer.bundesdruckerei.de/b1"
]
}
]
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{
"id": "pid_sd_jwt",
"format": "vc+sd-jwt",
"meta": {
"vct_values": [
"https://demo.pid-issuer.bundesdruckerei.de/credentials/pid/1.0",
"https://example.bmi.bund.de/credential/pid/1.0",
"urn:eu.europa.ec.eudi:pid:1"
]
},
"claims": [
{
"path": ["given_name"]
},
{
"path": ["family_name"]
},
{
"path": ["age_equal_or_over", "21"],
"values": [true]
},
{
"path": ["iss"],
"values": [
"https://demo.pid-issuer.bundesdruckerei.de/c",
"https://demo.pid-issuer.bundesdruckerei.de/c1",
"https://demo.pid-issuer.bundesdruckerei.de/b1"
]
}
]
}
{
"id": "pid_sd_jwt",
"format": "dc+sd-jwt",
"meta": {
"vct_values": [
"urn:eu.europa.ec.eudi:pid:1"
]
},
"claims": [
{
"path": ["given_name"]
},
{
"path": ["family_name"]
}
]
}


## Response encryption

The wallet requires response encryption, which means the wallet will encrypt the authorization response before sending it to the verifier. Encryption is performed based on [JWT-Secured Authorization Response Mode (JARM)(https://openid.net/specs/oauth-v2-jarm.html). It is important to distinguish that the request must be signed, while the response must be encrypted.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The wallet requires response encryption, which means the wallet will encrypt the authorization response before sending it to the verifier. Encryption is performed based on [JWT-Secured Authorization Response Mode (JARM)(https://openid.net/specs/oauth-v2-jarm.html). It is important to distinguish that the request must be signed, while the response must be encrypted.
The Paradym wallet optionally supports response encryption, which means the wallet will encrypt the authorization response before sending it to the verifier. It is important to distinguish that the request is usually signed, while the response is usually encrypted.

Comment on lines +116 to +121
For the wallet to encrypt the response some parameters need to be included in the authorization request:
- response_mode should be direct_post.jwt
- client_metadata should contain a jwks set containing a key where the use is set to enc and the crv is P-256
- The key in the client_metadata should contain authorization_encrypted_response_alg with value ECDH-ES and authorization_encrypted_response_enc with value A256GCM

The structure of the response can be found in [6.3.1. Response Mode "direct_post.jwt"](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-response-mode-direct_postjw).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For the wallet to encrypt the response some parameters need to be included in the authorization request:
- response_mode should be direct_post.jwt
- client_metadata should contain a jwks set containing a key where the use is set to enc and the crv is P-256
- The key in the client_metadata should contain authorization_encrypted_response_alg with value ECDH-ES and authorization_encrypted_response_enc with value A256GCM
The structure of the response can be found in [6.3.1. Response Mode "direct_post.jwt"](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-response-mode-direct_postjw).
For the wallet to encrypt the response some parameters need to be included in the authorization request:
- `response_mode` must be `direct_post.jwt`
- `client_metadata` should contain a jwks set containing a key where the use is set to `enc` and the `crv` is `P-256`
- If another encryption algorithm than A128GCM is used, the `client_metadata` must contain `encrypted_response_enc_values_supported`. Supported algorithms are `A256GCM` and `A128GCM`.
The structure of the response can be found in [Response Mode "direct_post.jwt"](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-response-mode-direct_post).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants