Skip to content

Commit

Permalink
Replace Triple to PresentingContent
Browse files Browse the repository at this point in the history
  • Loading branch information
ryosuke-wakaba committed Jul 2, 2024
1 parent f7b4677 commit 8cebb1b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ class OpenIdProvider(val uri: String, val option: SigningOption = SigningOption(
val responseMode = authRequest.responseMode ?: ResponseMode.FRAGMENT

// presentationDefinition.inputDescriptors を使って選択項目でフィルター
val vpTokens = credentials.mapNotNull { it ->
val presentingContents = credentials.mapNotNull { it ->
when (it.format) {
"vc+sd-jwt" -> {
createPresentationSubmissionSdJwtVc(it, authRequest, presentationDefinition)
Expand All @@ -295,18 +295,18 @@ class OpenIdProvider(val uri: String, val option: SigningOption = SigningOption(
}
}
// presentation_submissionを生成
val vpTokenValue = if (vpTokens.size == 1) {
vpTokens[0].second.first
} else if (vpTokens.isNotEmpty()) {
val tokens = vpTokens.map { it.second.first }
val vpTokenValue = if (presentingContents.size == 1) {
presentingContents[0].vpToken
} else if (presentingContents.isNotEmpty()) {
val tokens = presentingContents.map { it.vpToken }
jacksonObjectMapper().writeValueAsString(tokens)
} else {
"" // 0件の場合はブランク
}
val presentationSubmission = PresentationSubmission(
id = UUID.randomUUID().toString(),
definitionId = presentationDefinition.id,
descriptorMap = vpTokens.map { it.second.second }
descriptorMap = presentingContents.map { it.descriptorMap }
)
println(presentationSubmission)
val objectMapper: ObjectMapper = jacksonObjectMapper().apply {
Expand All @@ -325,7 +325,6 @@ class OpenIdProvider(val uri: String, val option: SigningOption = SigningOption(
return Result.failure(Exception("Unknown destination for response"))
}


val body = mutableMapOf(
"vp_token" to vpTokenValue,
"presentation_submission" to jsonString
Expand All @@ -340,7 +339,8 @@ class OpenIdProvider(val uri: String, val option: SigningOption = SigningOption(
print("status code: ${result.statusCode}")
print("location: ${result.location}")
print("cookies: ${result.cookies}")
val sharedContents = vpTokens.map { SharedContent(it.first, it.second.third) }
val sharedContents =
presentingContents.map { SharedContent(it.credential.id, it.disclosedClaims) }
return Result.success(Pair(result, sharedContents))
} catch (e: Exception) {
return Result.failure(e)
Expand All @@ -351,31 +351,29 @@ class OpenIdProvider(val uri: String, val option: SigningOption = SigningOption(
credential: SubmissionCredential,
authRequest: RequestObjectPayload,
presentationDefinition: PresentationDefinition
): Pair<String, Triple<String, DescriptorMap, List<DisclosedClaim>>> {
): PresentingContent {
val sdJwt = credential.credential
val (_, selectedDisclosures) = selectDisclosure(sdJwt, presentationDefinition)!!
val presentation = SdJwtVcPresentation.createPresentation(
return SdJwtVcPresentation.createPresentation(
credential,
selectedDisclosures,
authRequest,
keyBinding
)
return Pair( credential.id, presentation )
}

private fun createPresentationSubmissionJwtVc(
credential: SubmissionCredential,
authRequest: RequestObjectPayload,
): Pair<String, Triple<String, DescriptorMap, List<DisclosedClaim>>> {
): PresentingContent {
if (authRequest.responseMode != ResponseMode.DIRECT_POST) {
throw IllegalArgumentException("Unsupported response mode: ${authRequest.responseMode}")
}
val presentation = JwtVpJsonPresentation.createPresentation(
return JwtVpJsonPresentation.createPresentation(
credential,
authRequest,
jwtVpJsonGenerator
)
return Pair( credential.id, presentation )
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@ data class JwtVpJsonPayloadOptions(
var nonce: String
)

data class PresentingContent (
val credential: SubmissionCredential,
val vpToken: String,
val descriptorMap: DescriptorMap,
val disclosedClaims: List<DisclosedClaim>
)

object SdJwtVcPresentation {
fun genKeyBindingJwtParts(
sdJwt: String,
Expand Down Expand Up @@ -73,7 +80,7 @@ object SdJwtVcPresentation {
selectedDisclosures: List<SDJwtUtil.Disclosure>,
authRequest: RequestObjectPayload,
keyBinding: KeyBinding
): Triple<String, DescriptorMap, List<DisclosedClaim>> {
): PresentingContent {
val sdJwt = credential.credential
val keyBindingJwt = keyBinding.generateJwt(
sdJwt,
Expand All @@ -94,7 +101,12 @@ object SdJwtVcPresentation {
)
val disclosedClaims =
selectedDisclosures.map { DisclosedClaim(credential.id, credential.types, it.key!!) }
return Triple(vpToken, dm, disclosedClaims)
return PresentingContent(
credential = credential,
vpToken = vpToken,
descriptorMap = dm,
disclosedClaims = disclosedClaims
)
}
}

Expand Down Expand Up @@ -160,7 +172,7 @@ object JwtVpJsonPresentation {
credential: SubmissionCredential,
authRequest: RequestObjectPayload,
jwtVpJsonGenerator: JwtVpJsonGenerator
): Triple<String, DescriptorMap, List<DisclosedClaim>> {
): PresentingContent {
val objectMapper = jacksonObjectMapper()
val (_, payload, _) = JWT.decodeJwt(jwt = credential.credential)
val disclosedClaims = payload.mapNotNull { (key, value) ->
Expand Down Expand Up @@ -192,10 +204,11 @@ object JwtVpJsonPresentation {
)
)

return Triple(
first = vpToken,
second = genDescriptorMap(credential.inputDescriptor.id),
third = disclosedClaims
return PresentingContent(
credential = credential,
vpToken = vpToken,
descriptorMap = genDescriptorMap(credential.inputDescriptor.id),
disclosedClaims = disclosedClaims
)
}
}
Expand Down

0 comments on commit 8cebb1b

Please sign in to comment.