Skip to content

Commit

Permalink
test: Add test connectionless verification (#1418)
Browse files Browse the repository at this point in the history
Signed-off-by: mineme0110 <[email protected]>
Signed-off-by: Hyperledger Bot <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Hyperledger Bot <[email protected]>
  • Loading branch information
3 people authored Oct 28, 2024
1 parent c5071d5 commit 43b65b6
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package steps.connectionless

import com.google.gson.JsonObject
import interactions.Post
import interactions.body
import io.cucumber.java.en.*
Expand Down Expand Up @@ -78,4 +79,94 @@ class ConnectionLessSteps {
holder.remember("recordId", holderIssueCredentialRecord.recordId)
holder.remember("thid", holderIssueCredentialRecord.thid)
}

@When("{actor} creates a OOB Invitation request for JWT proof presentation")
fun verifierCreatesARequestForJwtProofPresentationOfferInvitation(verifier: Actor) {
val presentationRequest = RequestPresentationInput(
goalCode = "present-vp",
goal = "Request proof of vaccine",
options = Options(
challenge = "11c91493-01b3-4c4d-ac36-b336bab5bddf",
domain = "https://example-verifier.com",
),
proofs = listOf(
ProofRequestAux(
schemaId = "https://schema.org/Person",
trustIssuers = listOf("did:web:atalaprism.io/users/testUser"),
),
),
)

verifier.attemptsTo(
Post.to("/present-proof/presentations/invitation").body(presentationRequest),
Ensure.thatTheLastResponse().statusCode().isEqualTo(SC_CREATED),
)
val presentationStatus = SerenityRest.lastResponse().get<PresentationStatus>()

verifier.attemptsTo(
Ensure.thatTheLastResponse().statusCode().isEqualTo(SC_CREATED),
Ensure.that(presentationStatus.status).isEqualTo(PresentationStatus.Status.INVITATION_GENERATED),
Ensure.that(presentationStatus.role).isEqualTo(PresentationStatus.Role.VERIFIER),
)

verifier.remember("presentationStatus", presentationStatus)
verifier.remember("thid", presentationStatus.thid)
}

@And("{actor} accepts the OOB invitation request for JWT proof presentation from {actor}")
fun holderAcceptsJwtProofPresentationOfferInvitation(holder: Actor, verifier: Actor) {
val verifierPresentationStatusRecord = verifier.recall<PresentationStatus>("presentationStatus")
holder.attemptsTo(
Post.to("/present-proof/presentations/accept-invitation")
.with {
it.body(
AcceptRequestPresentationInvitation(
verifierPresentationStatusRecord.invitation?.invitationUrl?.split("=")?.getOrNull(1)
?: throw IllegalStateException("Invalid invitation URL format"),
),
)
},
)
val holderPresentationStatusRecord = SerenityRest.lastResponse().get<PresentationStatus>()

holder.attemptsTo(
Ensure.thatTheLastResponse().statusCode().isEqualTo(SC_OK),
Ensure.that(holderPresentationStatusRecord.status).isEqualTo(PresentationStatus.Status.REQUEST_RECEIVED),
Ensure.that(holderPresentationStatusRecord.role).isEqualTo(PresentationStatus.Role.PROVER),
)
holder.remember("recordId", holderPresentationStatusRecord.presentationId)
holder.remember("thid", holderPresentationStatusRecord.thid)
}

@When("{actor} creates a OOB Invitation request for sd-jwt proof presentation requesting [{}] claims")
fun verifierCreatesARequestForSdJwtProofPresentationInvitation(verifier: Actor, keys: String) {
val claims = JsonObject()
for (key in keys.split(",")) {
claims.addProperty(key, "{}")
}
val presentationRequest = RequestPresentationInput(
options = Options(
challenge = "11c91493-01b3-4c4d-ac36-b336bab5bddf",
domain = "https://example-verifier.com",
),
proofs = listOf(),
credentialFormat = "SDJWT",
claims = claims,
)

verifier.attemptsTo(
Post.to("/present-proof/presentations/invitation").body(presentationRequest),
Ensure.thatTheLastResponse().statusCode().isEqualTo(SC_CREATED),
)
val presentationStatus = SerenityRest.lastResponse().get<PresentationStatus>()

verifier.attemptsTo(
Ensure.thatTheLastResponse().statusCode().isEqualTo(SC_CREATED),
Ensure.that(presentationStatus.status).isEqualTo(PresentationStatus.Status.INVITATION_GENERATED),
Ensure.that(presentationStatus.role).isEqualTo(PresentationStatus.Role.VERIFIER),
)

verifier.remember("presentationStatus", presentationStatus)
verifier.remember("thid", presentationStatus.thid)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,10 @@ Feature: Present Proof Protocol
And Holder rejects the proof
Then Holder sees the proof is rejected

Scenario: Connectionless Verification Holder presents jwt credential proof to verifier
Given Holder has a jwt issued credential from Issuer
When Verifier creates a OOB Invitation request for JWT proof presentation
And Holder accepts the OOB invitation request for JWT proof presentation from Verifier
And Holder receives the presentation proof request
And Holder makes the jwt presentation of the proof
Then Verifier has the proof verified
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ Feature: Present SD-JWT Proof Protocol
| Verifier |
| Issuer |

Scenario Outline: Holder presents sd-jwt proof to <verifier>
Given Holder has a sd-jwt issued credential from Issuer
When <verifier> creates a OOB Invitation request for sd-jwt proof presentation requesting [firstName] claims
And Holder accepts the OOB invitation request for JWT proof presentation from <verifier>
And Holder receives the presentation proof request
And Holder makes the sd-jwt presentation of the proof disclosing [firstName] claims
Then <verifier> has the proof verified
Examples:
| verifier |
| Verifier |
| Issuer |

# Scenario: Holder presents sd-jwt proof with different claims from requested
# Given Verifier and Holder have an existing connection
# And Holder has a bound sd-jwt issued credential from Issuer
Expand Down

0 comments on commit 43b65b6

Please sign in to comment.