@@ -106,8 +106,14 @@ class OpenId4VpHolder(
106106 private val walletNonceMapStore : MapStore <String , String > = DefaultMapStore (),
107107 /* * Source for random bytes, i.e., nonces for encrypted responses. */
108108 private val randomSource : RandomSource = RandomSource .Secure ,
109+ /* * Callback to load encryption keys for pre-registered clients. */
110+ private val lookupJsonWebKeysForClient : (JsonWebKeyLookupInput ) -> JsonWebKeySet ? = { null }
109111) {
110112
113+ data class JsonWebKeyLookupInput (
114+ val clientId : String?
115+ )
116+
111117 private val supportedJwsAlgorithms = supportedAlgorithms
112118 .mapNotNull { it.toJwsAlgorithm().getOrNull()?.identifier }
113119 private val supportedCoseAlgorithms = supportedAlgorithms
@@ -194,7 +200,8 @@ class OpenId4VpHolder(
194200 response = AuthenticationResponse .Error (
195201 error = error.toOAuth2Error(request),
196202 clientMetadata = request.parameters.clientMetadata,
197- jsonWebKeys = request.parameters.clientMetadata?.loadJsonWebKeySet()?.keys,
203+ jsonWebKeys = request.parameters.clientMetadata?.loadJsonWebKeySet()?.keys
204+ ? : lookupJsonWebKeysForClient(JsonWebKeyLookupInput (request.parameters.clientId))?.keys,
198205 )
199206 )
200207 }
@@ -247,7 +254,8 @@ class OpenId4VpHolder(
247254 request = params,
248255 credentialPresentationRequest = params.parameters.loadCredentialRequest(),
249256 clientMetadata = params.parameters.clientMetadata,
250- jsonWebKeys = params.parameters.clientMetadata?.loadJsonWebKeySet()?.keys,
257+ jsonWebKeys = params.parameters.clientMetadata?.loadJsonWebKeySet()?.keys
258+ ? : lookupJsonWebKeysForClient(JsonWebKeyLookupInput (params.parameters.clientId))?.keys,
251259 requestObjectVerified = (params as ? RequestParametersFrom .JwsSigned )?.verified,
252260 verifierInfo = params.parameters.verifierInfo
253261 )
@@ -284,6 +292,7 @@ class OpenId4VpHolder(
284292 with (state) {
285293 val audience = request.extractAudience(jsonWebKeys)
286294 val jsonWebKeys = jsonWebKeys?.combine(request.extractLeafCertKey())
295+ ? : lookupJsonWebKeysForClient(JsonWebKeyLookupInput (request.parameters.clientId))?.keys
287296 val idToken = presentationFactory.createSignedIdToken(clock, keyMaterial.publicKey, request)
288297 .getOrNull()?.serialize()
289298 val presentation = credentialPresentation ? : credentialPresentationRequest?.toCredentialPresentation()
@@ -407,10 +416,6 @@ class OpenId4VpHolder(
407416 ?.let { remoteResourceRetriever(RemoteResourceRetrieverInput (it)) }
408417 ?.let { vckJsonSerializer.decodeFromString(it) }
409418
410- @Suppress(" DEPRECATION" )
411- private suspend fun AuthenticationRequestParameters.loadClientMetadata (): RelyingPartyMetadata ? =
412- clientMetadata
413-
414419}
415420
416421private fun Collection<JsonWebKey>?.combine (certKey : JsonWebKey ? ): Collection <JsonWebKey > =
0 commit comments