Skip to content

Commit 0240a6e

Browse files
committed
Make sure JWT VC subjects are correct
1 parent 53bb1f7 commit 0240a6e

5 files changed

Lines changed: 30 additions & 16 deletions

File tree

vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/openid/OpenId4VpVerifier.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -704,9 +704,6 @@ open class OpenId4VpVerifier(
704704
}
705705

706706
private fun VerifyPresentationResult.mapToAuthnResponseResult(state: String) = when (this) {
707-
is VerifyPresentationResult.InvalidStructure -> AuthnResponseResult.Error("parse vp failed", state)
708-
.also { Napier.w("VP error: $this") }
709-
710707
is VerifyPresentationResult.ValidationError -> AuthnResponseResult.ValidationError("vpToken", state, cause)
711708
.also { Napier.w("VP error: $this", cause) }
712709

vck/src/commonMain/kotlin/at/asitplus/wallet/lib/agent/ValidatorMdoc.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,12 @@ class ValidatorMdoc(
160160
*/
161161
suspend fun verifyIsoCred(it: IssuerSigned, issuerKey: CoseKey?): VerifyCredentialResult {
162162
Napier.d("Verifying ISO Cred $it")
163-
if (!mdocInputValidator(it, issuerKey).isSuccess) {
164-
return InvalidStructure(coseCompliantSerializer.encodeToByteArray(it).encodeToString(Base16Strict))
163+
val mdocInputValidator = mdocInputValidator(it, issuerKey)
164+
if (!mdocInputValidator.isSuccess) {
165+
return InvalidStructure(
166+
input = coseCompliantSerializer.encodeToByteArray(it).encodeToString(Base16Strict),
167+
reason = mdocInputValidator.integrityValidationSummary.toString()
168+
)
165169
}
166170
return SuccessIso(it)
167171
}

vck/src/commonMain/kotlin/at/asitplus/wallet/lib/agent/ValidatorVcJws.kt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,27 @@ class ValidatorVcJws(
140140
Napier.d("Validating VC-JWS $input")
141141
val validationSummary = vcJwsInputValidator(input, publicKey)
142142
return when {
143-
validationSummary !is VcJwsInputValidationResult.ContentValidationSummary -> InvalidStructure(input)
144-
!validationSummary.isIntegrityGood -> InvalidStructure(input)
145-
!validationSummary.contentSemanticsValidationSummary.isSuccess -> InvalidStructure(input)
146-
validationSummary.subjectMatchingResult?.isSuccess == false -> ValidationError("subject not matching key")
147-
validationSummary.isSuccess -> SuccessJwt(validationSummary.payload)
143+
validationSummary !is VcJwsInputValidationResult.ContentValidationSummary -> InvalidStructure(
144+
input = input,
145+
reason = validationSummary.toString()
146+
)
147+
148+
!validationSummary.isIntegrityGood -> InvalidStructure(
149+
input = input,
150+
reason = "!isIntegrityGood"
151+
)
152+
153+
!validationSummary.contentSemanticsValidationSummary.isSuccess -> InvalidStructure(
154+
input = input,
155+
reason = validationSummary.contentSemanticsValidationSummary.toString()
156+
)
157+
158+
validationSummary.subjectMatchingResult?.isSuccess == false ->
159+
ValidationError("subject not matching key")
160+
161+
validationSummary.isSuccess ->
162+
SuccessJwt(validationSummary.payload)
163+
148164
else -> ValidationError(input) // this branch shouldn't be executed anyway
149165
}
150166
}

vck/src/commonMain/kotlin/at/asitplus/wallet/lib/agent/Verifier.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,6 @@ interface Verifier {
7272
val documents: List<IsoDocumentParsed>,
7373
) : VerifyPresentationResult()
7474

75-
data class InvalidStructure(
76-
val input: String,
77-
) : VerifyPresentationResult()
78-
7975
data class ValidationError(
8076
val cause: Throwable,
8177
) : VerifyPresentationResult() {
@@ -102,6 +98,7 @@ interface Verifier {
10298

10399
data class InvalidStructure(
104100
val input: String,
101+
val reason: String,
105102
) : VerifyCredentialResult()
106103

107104
data class ValidationError(

vck/src/commonTest/kotlin/at/asitplus/wallet/lib/agent/ValidatorVcTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ class ValidatorVcTest : FreeSpec() {
233233
.let {
234234
VerifiableCredentialJws(
235235
vc = it,
236-
subject = "urn:${uuid4()}",
236+
subject = it.credentialSubject.id,
237237
notBefore = it.issuanceDate,
238238
issuer = it.issuer,
239239
expiration = Clock.System.now() + 1.hours,
@@ -388,7 +388,7 @@ class ValidatorVcTest : FreeSpec() {
388388

389389
private fun wrapVcInJws(
390390
it: VerifiableCredential,
391-
subject: String = verifierKeyMaterial.identifier,
391+
subject: String = it.credentialSubject.id,
392392
issuer: String = it.issuer,
393393
jwtId: String = it.id,
394394
issuanceDate: Instant = it.issuanceDate,

0 commit comments

Comments
 (0)