Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit cf7cfd6

Browse files
committed
Append disclosures for SD-JWT presentation
1 parent 46e2811 commit cf7cfd6

File tree

5 files changed

+23
-7
lines changed

5 files changed

+23
-7
lines changed

src/main/kotlin/id/walt/service/SSIKit2WalletService.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ class SSIKit2WalletService(accountId: UUID, walletId: UUID) : WalletService(acco
183183
/**
184184
* @return redirect uri
185185
*/
186-
override suspend fun usePresentationRequest(request: String, did: String, selectedCredentialIds: List<String>, disclosures: Map<String, List<String>>): Result<String?> {
186+
override suspend fun usePresentationRequest(request: String, did: String, selectedCredentialIds: List<String>, disclosures: Map<String, List<String>>?): Result<String?> {
187187
val credentialWallet = getCredentialWallet(did)
188188

189189
val authReq = AuthorizationRequest.fromHttpQueryString(Url(request).encodedQuery)
@@ -192,7 +192,9 @@ class SSIKit2WalletService(accountId: UUID, walletId: UUID) : WalletService(acco
192192
println("USING PRESENTATION REQUEST, SELECTED CREDENTIALS: $selectedCredentialIds")
193193

194194
SessionAttributes.HACK_outsideMappedSelectedCredentialsPerSession[authReq.state + authReq.presentationDefinition] = selectedCredentialIds
195-
SessionAttributes.HACK_outsideMappedSelectedDisclosuresPerSession[authReq.state + authReq.presentationDefinition] = disclosures
195+
if (disclosures != null) {
196+
SessionAttributes.HACK_outsideMappedSelectedDisclosuresPerSession[authReq.state + authReq.presentationDefinition] = disclosures
197+
}
196198

197199
val presentationSession = credentialWallet.initializeAuthorization(authReq, 60.seconds, selectedCredentialIds.toSet())
198200
println("Initialized authorization (VPPresentationSession): $presentationSession")

src/main/kotlin/id/walt/service/WalletKitWalletService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ class WalletKitWalletService(accountId: UUID, walletId: UUID) : WalletService(ac
200200
val state: String?
201201
)
202202

203-
override suspend fun usePresentationRequest(request: String, did: String, selectedCredentialIds: List<String>, disclosures: Map<String, List<String>>): Result<String?> {
203+
override suspend fun usePresentationRequest(request: String, did: String, selectedCredentialIds: List<String>, disclosures: Map<String, List<String>>?): Result<String?> {
204204
val decoded = URLDecoder.decode(request, Charset.defaultCharset())
205205
val queryParams = getQueryParams(decoded)
206206
val redirectUri = queryParams["redirect_uri"]?.first()

src/main/kotlin/id/walt/service/WalletService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ abstract class WalletService(val accountId: UUID, val walletId: UUID) {
2222
abstract fun matchCredentialsByPresentationDefinition(presentationDefinition: PresentationDefinition): List<WalletCredential>
2323

2424
// SIOP
25-
abstract suspend fun usePresentationRequest(request: String, did: String, selectedCredentialIds: List<String>, disclosures: Map<String, List<String>>): Result<String?>
25+
abstract suspend fun usePresentationRequest(request: String, did: String, selectedCredentialIds: List<String>, disclosures: Map<String, List<String>>?): Result<String?>
2626
abstract suspend fun resolvePresentationRequest(request: String): String
2727
abstract suspend fun useOfferRequest(offer: String, did: String)
2828

src/main/kotlin/id/walt/service/oidc4vc/TestCredentialWallet.kt

+15-2
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,25 @@ class TestCredentialWallet(
111111
val selectedCredentials =
112112
HACK_outsideMappedSelectedCredentialsPerSession[session.authorizationRequest!!.state + session.authorizationRequest.presentationDefinition]!!
113113
val selectedDisclosures =
114-
HACK_outsideMappedSelectedDisclosuresPerSession[session.authorizationRequest!!.state + session.authorizationRequest.presentationDefinition]!!
114+
HACK_outsideMappedSelectedDisclosuresPerSession[session.authorizationRequest!!.state + session.authorizationRequest.presentationDefinition]
115115

116116
println("Selected credentials: $selectedCredentials")
117117
val matchedCredentials = walletService.getCredentialsByIds(selectedCredentials)
118118
println("Matched credentials: $matchedCredentials")
119119

120+
println("Using disclosures: $selectedDisclosures")
121+
122+
val credentialsPresented = matchedCredentials.map {
123+
if (selectedDisclosures?.containsKey(it.id) == true) {
124+
it.document + "~${selectedDisclosures[it.id]!!.joinToString("~") }"
125+
} else {
126+
it.document
127+
}
128+
}
129+
130+
println("Credentials presented: $credentialsPresented")
131+
132+
120133
val vp = Json.encodeToString(
121134
mapOf(
122135
"sub" to this.did,
@@ -130,7 +143,7 @@ class TestCredentialWallet(
130143
"type" to listOf("VerifiablePresentation"),
131144
"id" to "urn:uuid:${UUID.generateUUID().toString().lowercase()}",
132145
"holder" to this.did,
133-
"verifiableCredential" to matchedCredentials.map { it.document }
146+
"verifiableCredential" to credentialsPresented
134147
)
135148
).toJsonElement()
136149
)

src/main/kotlin/id/walt/web/controllers/ExchangeController.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,10 @@ fun Application.exchange() = walletRoute {
106106
?: throw IllegalArgumentException("No DID to use supplied")
107107
val selectedCredentialIds = req.selectedCredentials
108108
// TODO -> ?: auto matching
109+
val disclosures = req.disclosures
109110

110111

111-
val result = wallet.usePresentationRequest(request, did, selectedCredentialIds, emptyMap()) // TODO add disclosures here
112+
val result = wallet.usePresentationRequest(request, did, selectedCredentialIds, disclosures) // TODO add disclosures here
112113

113114
if (result.isSuccess) {
114115
wallet.addOperationHistory(

0 commit comments

Comments
 (0)