diff --git a/src/protocols/openid4vp/OpenID4VPClientAPI.ts b/src/protocols/openid4vp/OpenID4VPClientAPI.ts index 8342d06..3df648f 100644 --- a/src/protocols/openid4vp/OpenID4VPClientAPI.ts +++ b/src/protocols/openid4vp/OpenID4VPClientAPI.ts @@ -12,7 +12,7 @@ import { CredentialRenderingService } from "../../rendering"; import { VerifiableCredentialFormat } from "../../types"; import { fromBase64Url, toBase64Url } from "../../utils/util"; import { TransactionData } from "./transactionData"; -import { CredentialEngineOptions, CredentialIssuerMetadata, IacasResponse, OpenID4VPClientIdScheme, OpenID4VPOptions, PresentationClaims, PresentationInfo, OpenID4VPResponseMode, RPState } from "./types"; +import { CredentialEngineOptions, CredentialIssuerMetadata, IacasResponse, OpenID4VPClientIdScheme, OpenID4VPOptions, PresentationClaims, PresentationInfo, OpenID4VPResponseMode, RPState, OpenID4VPClientMetadata } from "./types"; import { DcqlPresentationResult } from 'dcql'; import { exportJWK, generateKeyPair, importPKCS8, SignJWT, compactDecrypt, CompactDecryptResult, importJWK } from "jose"; import { serializeDcqlQuery } from "../../utils/serializeDcqlQuery"; @@ -207,7 +207,7 @@ export class OpenID4VPClientAPI { ] }, "encrypted_response_enc_values_supported": ["A256GCM"], - "vp_formats": { + "vp_formats_supported": { "vc+sd-jwt": { "sd-jwt_alg_values": [ "ES256", @@ -225,10 +225,11 @@ export class OpenID4VPClientAPI { ] }, "mso_mdoc": { - "alg": ["ES256"] + "issuerauth_alg_values": [-7], + "deviceauth_alg_values": [-7] } } - }, + } satisfies OpenID4VPClientMetadata, transaction_data: transactionDataObject.length > 0 ? transactionDataObject : undefined }) .setIssuedAt() diff --git a/src/protocols/openid4vp/OpenID4VPServerAPI.test.ts b/src/protocols/openid4vp/OpenID4VPServerAPI.test.ts index 306711d..f5d2ea7 100644 --- a/src/protocols/openid4vp/OpenID4VPServerAPI.test.ts +++ b/src/protocols/openid4vp/OpenID4VPServerAPI.test.ts @@ -86,7 +86,7 @@ const buildRequestUriJwt = async (clientId: string, dcqlQuery: Record { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-123"); url.searchParams.set("state", "state-123"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); url.searchParams.set("dcql_query", JSON.stringify(dcql_query)); @@ -215,7 +215,7 @@ describe("OpenID4VPServerAPI.handleAuthorizationRequest", () => { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-456"); url.searchParams.set("state", "state-456"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); url.searchParams.set("dcql_query", JSON.stringify(dcql_query)); @@ -269,7 +269,7 @@ describe("OpenID4VPServerAPI.handleAuthorizationRequest", () => { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-789"); url.searchParams.set("state", "state-789"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); url.searchParams.set("dcql_query", JSON.stringify(dcql_query)); @@ -307,7 +307,7 @@ describe("OpenID4VPServerAPI.handleAuthorizationRequest", () => { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-000"); url.searchParams.set("state", "state-000"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); const result = await helper.handleAuthorizationRequest(url.toString(), []); @@ -350,7 +350,7 @@ describe("OpenID4VPServerAPI.handleAuthorizationRequest", () => { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-001"); url.searchParams.set("state", "state-001"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); url.searchParams.set("dcql_query", JSON.stringify(dcql_query)); @@ -398,7 +398,7 @@ describe("OpenID4VPServerAPI.handleAuthorizationRequest", () => { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-reused"); url.searchParams.set("state", "state-002"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); url.searchParams.set("dcql_query", JSON.stringify(dcql_query)); @@ -463,7 +463,7 @@ describe("OpenID4VPServerAPI.handleAuthorizationRequest", () => { url.searchParams.set("response_uri", "https://verifier.example.com/cb"); url.searchParams.set("nonce", "nonce-hash"); url.searchParams.set("state", "state-hash"); - url.searchParams.set("client_metadata", JSON.stringify({ vp_formats: {} })); + url.searchParams.set("client_metadata", JSON.stringify({ vp_formats_supported: {} })); url.searchParams.set("response_mode", JSON.stringify(OpenID4VPResponseMode.DIRECT_POST)); url.searchParams.set("dcql_query", JSON.stringify(dcql_query)); url.searchParams.set("request_uri", "https://verifier.example.com/request-object"); @@ -493,7 +493,7 @@ describe("OpenID4VPServerAPI.createAuthorizationResponse", () => { client_id: "x509_san_dns:verifier.example.com", state: "state-jwe", client_metadata: { - vp_formats: {}, + vp_formats_supported: {}, ...(encryptedResponseEncValuesSupported ? { encrypted_response_enc_values_supported: encryptedResponseEncValuesSupported } : {}), diff --git a/src/protocols/openid4vp/OpenID4VPServerAPI.ts b/src/protocols/openid4vp/OpenID4VPServerAPI.ts index ad8f424..d832548 100644 --- a/src/protocols/openid4vp/OpenID4VPServerAPI.ts +++ b/src/protocols/openid4vp/OpenID4VPServerAPI.ts @@ -683,7 +683,7 @@ export class OpenID4VPServerAPI; diff --git a/src/schemas/index.ts b/src/schemas/index.ts index 35bb1e3..d4b6193 100644 --- a/src/schemas/index.ts +++ b/src/schemas/index.ts @@ -6,3 +6,4 @@ export * from './OpenidCredentialIssuerMetadataSchema'; export * from './SdJwtVcPayloadSchema'; export * from './SdJwtVcTypeMetadataSchema'; export * from './MdocIacasResponseSchema'; +export * from './OpenID4VPClientMetadataVpFormatsSupportedSchema';