From 1ed2a14651b6411add88f96208db6037b49ebd4a Mon Sep 17 00:00:00 2001 From: Bassam Date: Tue, 10 Sep 2024 12:17:48 -0400 Subject: [PATCH] fix: Remove type DID (#1327) Signed-off-by: Bassam Riman --- .../server/jobs/BackgroundJobsHelper.scala | 2 +- .../service/OIDCCredentialIssuerService.scala | 6 +- .../VcVerificationControllerImplSpec.scala | 11 ++- .../VcVerificationControllerTestTools.scala | 2 +- .../core/service/CredentialServiceImpl.scala | 9 +-- .../service/PresentationServiceImpl.scala | 4 +- ...edentialStatusListRepositoryInMemory.scala | 4 +- .../service/PresentationServiceSpec.scala | 2 +- .../PresentationServiceSpecHelper.scala | 5 +- .../VcVerificationServiceImplSpec.scala | 76 +++++++++---------- .../VcVerificationServiceSpecHelper.scala | 2 +- .../JdbcCredentialStatusListRepository.scala | 2 +- .../vc/jwt/VerifiableCredentialPayload.scala | 16 +--- .../jwt/VerifiablePresentationPayload.scala | 2 +- .../vc/jwt/revocation/VCStatusList2021.scala | 3 +- .../pollux/vc/jwt/JWTVerificationTest.scala | 32 ++++---- .../jwt/revocation/VCStatusList2021Spec.scala | 5 +- 17 files changed, 83 insertions(+), 100 deletions(-) diff --git a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/jobs/BackgroundJobsHelper.scala b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/jobs/BackgroundJobsHelper.scala index ec78799452..2f046f99f0 100644 --- a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/jobs/BackgroundJobsHelper.scala +++ b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/agent/server/jobs/BackgroundJobsHelper.scala @@ -107,7 +107,7 @@ trait BackgroundJobsHelper { case Some(Secp256k1KeyPair(publicKey, privateKey)) => ZIO.succeed( JwtIssuer( - org.hyperledger.identus.pollux.vc.jwt.DID(jwtIssuerDID.toString), + jwtIssuerDID.did, ES256KSigner(privateKey.toJavaPrivateKey), publicKey.toJavaPublicKey ) diff --git a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala index 18a66b69b5..e9e58451cb 100644 --- a/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala +++ b/cloud-agent/service/server/src/main/scala/org/hyperledger/identus/oid4vci/service/OIDCCredentialIssuerService.scala @@ -15,7 +15,6 @@ import org.hyperledger.identus.pollux.core.service.{ URIDereferencer } import org.hyperledger.identus.pollux.vc.jwt.{ - DID as PolluxDID, DidResolver, Issuer, JWT, @@ -24,7 +23,6 @@ import org.hyperledger.identus.pollux.vc.jwt.{ W3cCredentialPayload, * } -import org.hyperledger.identus.pollux.vc.jwt.DID.* import org.hyperledger.identus.shared.models.* import zio.* @@ -179,7 +177,7 @@ case class OIDCCredentialIssuerServiceImpl( } def buildJwtVerifiableCredential( - issuerDid: PolluxDID, + issuerDid: DID, subjectDid: Option[DID], credentialIdentifier: Option[String], credentialDefinition: CredentialDefinition, @@ -194,7 +192,7 @@ case class OIDCCredentialIssuerServiceImpl( `type` = Set( "VerifiableCredential" ) ++ credentialDefinition.`type`, // TODO: This information should come from Schema registry by record.schemaId - issuer = Left(issuerDid.value), + issuer = Left(issuerDid.toString), issuanceDate = Instant.now(), maybeExpirationDate = None, // TODO: Add expiration date maybeCredentialSchema = None, // TODO: Add schema from schema registry diff --git a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerImplSpec.scala b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerImplSpec.scala index 935834c65e..c1e77224cb 100644 --- a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerImplSpec.scala +++ b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerImplSpec.scala @@ -8,7 +8,6 @@ import org.hyperledger.identus.castor.core.service.MockDIDService import org.hyperledger.identus.iam.authentication.AuthenticatorWithAuthZ import org.hyperledger.identus.pollux.vc.jwt.* import org.hyperledger.identus.pollux.vc.jwt.CredentialPayload.Implicits.* -import org.hyperledger.identus.pollux.vc.jwt.DID.* import org.hyperledger.identus.verification.controller.http.* import sttp.client3.{basicRequest, DeserializationException, Response, UriContext} import sttp.client3.ziojson.* @@ -31,13 +30,13 @@ object VcVerificationControllerImplSpec extends ZIOSpecDefault with VcVerificati test("provide incorrect recordId to endpoint") { for { vcVerificationController <- ZIO.service[VcVerificationController] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" currentTime = OffsetDateTime.parse("2010-01-01T00:00:00Z").toOption.get jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -70,7 +69,7 @@ object VcVerificationControllerImplSpec extends ZIOSpecDefault with VcVerificati ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) authenticator <- ZIO.service[AuthenticatorWithAuthZ[BaseEntity]] @@ -88,10 +87,10 @@ object VcVerificationControllerImplSpec extends ZIOSpecDefault with VcVerificati VcVerificationRequest( signedJwtCredential.value, List( - ParameterizableVcVerification(VcVerification.AudienceCheck, Some(DidParameter(verifier.value))), + ParameterizableVcVerification(VcVerification.AudienceCheck, Some(DidParameter(verifier))), ParameterizableVcVerification( VcVerification.IssuerIdentification, - Some(DidParameter(issuer.did.value)) + Some(DidParameter(issuer.did.toString)) ) ) ) diff --git a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerTestTools.scala b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerTestTools.scala index 96b5d7cabf..f9a5b68968 100644 --- a/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerTestTools.scala +++ b/cloud-agent/service/server/src/test/scala/org/hyperledger/identus/verification/controller/VcVerificationControllerTestTools.scala @@ -29,7 +29,7 @@ trait VcVerificationControllerTestTools extends PostgresTestContainerSupport { protected val issuer = Issuer( - did = org.hyperledger.identus.pollux.vc.jwt.DID(issuerDidData.id.did.toString), + did = issuerDidData.id.did, signer = ES256KSigner(issuerKp.privateKey.toJavaPrivateKey), publicKey = issuerKp.publicKey.toJavaPublicKey ) diff --git a/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/CredentialServiceImpl.scala b/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/CredentialServiceImpl.scala index 5f7ae5df19..30f408228d 100644 --- a/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/CredentialServiceImpl.scala +++ b/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/CredentialServiceImpl.scala @@ -26,7 +26,6 @@ import org.hyperledger.identus.pollux.core.repository.{CredentialRepository, Cre import org.hyperledger.identus.pollux.prex.{ClaimFormat, Jwt, PresentationDefinition} import org.hyperledger.identus.pollux.sdjwt.* import org.hyperledger.identus.pollux.vc.jwt.{Issuer as JwtIssuer, *} -import org.hyperledger.identus.pollux.vc.jwt.DID.* import org.hyperledger.identus.shared.crypto.{Ed25519KeyPair, Ed25519PublicKey, Secp256k1KeyPair} import org.hyperledger.identus.shared.http.{DataUrlResolver, GenericUriResolver} import org.hyperledger.identus.shared.models.* @@ -501,7 +500,7 @@ class CredentialServiceImpl( maybeId = None, `type` = Vector("VerifiablePresentation"), verifiableCredential = IndexedSeq.empty, - holder = subject.did.value, + holder = subject.did.toString, verifier = IndexedSeq.empty ++ maybeOptions.map(_.domain), maybeIssuanceDate = None, maybeExpirationDate = None @@ -570,7 +569,7 @@ class CredentialServiceImpl( .orDieAsUnmanagedFailure Secp256k1KeyPair(publicKey, privateKey) = ecKeyPair jwtIssuer = JwtIssuer( - org.hyperledger.identus.pollux.vc.jwt.DID(jwtIssuerDID.toString), + jwtIssuerDID.did, ES256KSigner(privateKey.toJavaPrivateKey, keyId), publicKey.toJavaPublicKey ) @@ -611,7 +610,7 @@ class CredentialServiceImpl( ed25519keyPair <- getEd25519SigningKeyPair(jwtIssuerDID, verificationRelationship) } yield { JwtIssuer( - org.hyperledger.identus.pollux.vc.jwt.DID(jwtIssuerDID.toString), + jwtIssuerDID.did, EdSigner(ed25519keyPair, keyId), Ed25519PublicKey.toJavaEd25519PublicKey(ed25519keyPair.publicKey.getEncoded) ) @@ -1135,7 +1134,7 @@ class CredentialServiceImpl( maybeId = None, `type` = Set("VerifiableCredential"), // TODO: This information should come from Schema registry by record.schemaId - issuer = Left(jwtIssuer.did.value), + issuer = Left(jwtIssuer.did.toString), issuanceDate = issuanceDate, maybeExpirationDate = record.validityPeriod.map(sec => issuanceDate.plusSeconds(sec.toLong)), maybeCredentialSchema = diff --git a/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceImpl.scala b/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceImpl.scala index 48afbdfa78..edecea22e8 100644 --- a/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceImpl.scala +++ b/pollux/core/src/main/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceImpl.scala @@ -633,7 +633,7 @@ private class PresentationServiceImpl( maybeId = None, `type` = Vector("VerifiablePresentation"), verifiableCredential = vcs.toVector, - holder = prover.did.value, + holder = prover.did.toString, verifier = Vector(options.domain), maybeIssuanceDate = None, maybeExpirationDate = None @@ -645,7 +645,7 @@ private class PresentationServiceImpl( maybeId = None, `type` = Vector("VerifiablePresentation"), verifiableCredential = vcs.toVector, - holder = prover.did.value, + holder = prover.did.toString, verifier = Vector("https://example.verifier"), // TODO Fix this maybeIssuanceDate = None, maybeExpirationDate = None diff --git a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/repository/CredentialStatusListRepositoryInMemory.scala b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/repository/CredentialStatusListRepositoryInMemory.scala index 7c1881ba69..d86e8a5d95 100644 --- a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/repository/CredentialStatusListRepositoryInMemory.scala +++ b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/repository/CredentialStatusListRepositoryInMemory.scala @@ -89,8 +89,8 @@ class CredentialStatusListRepositoryInMemory( val id = UUID.randomUUID() val issued = Instant.now() - val issuerDid = jwtIssuer.did.value - val canonical = PrismDID.fromString(issuerDid).fold(e => throw RuntimeException(e), _.asCanonical) + val issuerDid = jwtIssuer.did + val canonical = PrismDID.fromString(issuerDid.toString).fold(e => throw RuntimeException(e), _.asCanonical) val embeddedProofCredential = for { bitString <- BitString.getInstance().mapError { diff --git a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpec.scala b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpec.scala index a3faccabca..1b84f45743 100644 --- a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpec.scala +++ b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpec.scala @@ -253,7 +253,7 @@ object PresentationServiceSpec extends ZIOSpecDefault with PresentationServiceSp Some(Seq(aIssueCredentialRecord.id.value)), PresentationRecord.ProtocolState.RequestPending ) - issuer = createIssuer(DID("did:prism:issuer")) + issuer = createIssuer("did:prism:issuer") aPresentationPayload <- svc.createJwtPresentationPayloadFromRecord(aRecord.id, issuer, Instant.now()) } yield { assertTrue(aPresentationPayload.toJwtPresentationPayload.iss == "did:prism:issuer") diff --git a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpecHelper.scala b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpecHelper.scala index b5c2ad47f2..e6ea65d26c 100644 --- a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpecHelper.scala +++ b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/PresentationServiceSpecHelper.scala @@ -2,6 +2,7 @@ package org.hyperledger.identus.pollux.core.service import com.nimbusds.jose.jwk.* import org.hyperledger.identus.agent.walletapi.memory.GenericSecretStorageInMemory +import org.hyperledger.identus.castor.core.model.did.DID import org.hyperledger.identus.mercury.{AgentPeerService, PeerDID} import org.hyperledger.identus.mercury.model.{AttachmentDescriptor, DidId} import org.hyperledger.identus.mercury.protocol.presentproof.* @@ -42,14 +43,14 @@ trait PresentationServiceSpecHelper { CredentialRepositoryInMemory.layer ) ++ defaultWalletLayer - def createIssuer(did: DID): Issuer = { + def createIssuer(did: String): Issuer = { val keyPair = KmpSecp256k1KeyOps.generateKeyPair val javaSKey = keyPair.privateKey.toJavaPrivateKey val javaPKey = keyPair.publicKey.toJavaPublicKey Issuer( - did = did, + did = DID.fromString(did).toOption.get, signer = ES256KSigner(javaSKey), publicKey = javaPKey ) diff --git a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceImplSpec.scala b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceImplSpec.scala index a4ed502eb2..05af3c273e 100644 --- a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceImplSpec.scala +++ b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceImplSpec.scala @@ -7,7 +7,6 @@ import org.hyperledger.identus.castor.core.service.MockDIDService import org.hyperledger.identus.pollux.core.service.ResourceURIDereferencerImpl import org.hyperledger.identus.pollux.vc.jwt.* import org.hyperledger.identus.pollux.vc.jwt.CredentialPayload.Implicits.* -import org.hyperledger.identus.pollux.vc.jwt.DID.* import org.hyperledger.identus.shared.models.{WalletAccessContext, WalletId} import zio.* import zio.test.* @@ -22,13 +21,13 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify aud given valid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -61,19 +60,19 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- svc.verify( List( - VcVerificationRequest(signedJwtCredential.value, VcVerification.AudienceCheck(verifier.value)) + VcVerificationRequest(signedJwtCredential.value, VcVerification.AudienceCheck(verifier)) ) ) } yield { assertTrue( result.contains( - VcVerificationResult(signedJwtCredential.value, VcVerification.AudienceCheck(verifier.value), true) + VcVerificationResult(signedJwtCredential.value, VcVerification.AudienceCheck(verifier), true) ) ) } @@ -87,14 +86,13 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify aud given invalid") { for { svc <- ZIO.service[VcVerificationService] - issuerDid = DID(issuerDidData.id.toString) - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -127,19 +125,19 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- svc.verify( List( - VcVerificationRequest(signedJwtCredential.value, VcVerification.AudienceCheck(issuer.did.value)) + VcVerificationRequest(signedJwtCredential.value, VcVerification.AudienceCheck(issuer.did.toString)) ) ) } yield { assertTrue( result.contains( - VcVerificationResult(signedJwtCredential.value, VcVerification.AudienceCheck(issuer.did.value), false) + VcVerificationResult(signedJwtCredential.value, VcVerification.AudienceCheck(issuer.did.toString), false) ) ) } @@ -153,13 +151,13 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify signature given valid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -192,7 +190,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- @@ -218,13 +216,13 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify issuer given valid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -257,13 +255,16 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- svc.verify( List( - VcVerificationRequest(signedJwtCredential.value, VcVerification.IssuerIdentification(issuer.did.value)) + VcVerificationRequest( + signedJwtCredential.value, + VcVerification.IssuerIdentification(issuer.did.toString) + ) ) ) } yield { @@ -271,7 +272,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS result.contains( VcVerificationResult( signedJwtCredential.value, - VcVerification.IssuerIdentification(issuer.did.value), + VcVerification.IssuerIdentification(issuer.did.toString), true ) ) @@ -287,14 +288,13 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify issuer given invalid") { for { svc <- ZIO.service[VcVerificationService] - issuerDid = DID(issuerDidData.id.toString) - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -327,13 +327,13 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- svc.verify( List( - VcVerificationRequest(signedJwtCredential.value, VcVerification.IssuerIdentification(verifier.value)) + VcVerificationRequest(signedJwtCredential.value, VcVerification.IssuerIdentification(verifier)) ) ) } yield { @@ -341,7 +341,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS result.contains( VcVerificationResult( signedJwtCredential.value, - VcVerification.IssuerIdentification(verifier.value), + VcVerification.IssuerIdentification(verifier), false ) ) @@ -357,14 +357,14 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify nbf given valid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" currentTime = OffsetDateTime.parse("2010-01-01T00:00:00Z").toOption.get jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -397,7 +397,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- @@ -423,14 +423,14 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify nbf given invalid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" currentTime = OffsetDateTime.parse("2010-01-01T00:00:00Z").toOption.get.minusDays(2) jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -463,7 +463,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- @@ -489,14 +489,14 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify exp given valid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" currentTime = OffsetDateTime.parse("2010-01-01T00:00:00Z").toOption.get jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -529,7 +529,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- @@ -555,14 +555,14 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS test("verify exp given invalid") { for { svc <- ZIO.service[VcVerificationService] - verifier = DID("did:prism:verifier") + verifier = "did:prism:verifier" currentTime = OffsetDateTime.parse("2010-01-12T00:00:00Z").toOption.get jwtCredentialPayload = W3cCredentialPayload( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), maybeId = Some("http://example.edu/credentials/3732"), `type` = Set("VerifiableCredential", "UniversityDegreeCredential"), - issuer = Left(issuer.did.value), + issuer = Left(issuer.did.toString), issuanceDate = Instant.parse("2010-01-01T00:00:00Z"), maybeExpirationDate = Some(Instant.parse("2010-01-12T00:00:00Z")), maybeValidFrom = Some(Instant.parse("2010-01-12T00:00:00Z")), @@ -595,7 +595,7 @@ object VcVerificationServiceImplSpec extends ZIOSpecDefault with VcVerificationS ), maybeEvidence = Option.empty, maybeTermsOfUse = Option.empty, - aud = Set(verifier.value) + aud = Set(verifier) ).toJwtCredentialPayload signedJwtCredential = issuer.signer.encode(jwtCredentialPayload.asJson) result <- diff --git a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceSpecHelper.scala b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceSpecHelper.scala index 3ae6b795dd..c2f52148ea 100644 --- a/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceSpecHelper.scala +++ b/pollux/core/src/test/scala/org/hyperledger/identus/pollux/core/service/verification/VcVerificationServiceSpecHelper.scala @@ -18,7 +18,7 @@ trait VcVerificationServiceSpecHelper { protected val issuer = Issuer( - did = org.hyperledger.identus.pollux.vc.jwt.DID(issuerDidData.id.did.toString), + did = issuerDidData.id.did, signer = ES256KSigner(issuerKp.privateKey.toJavaPrivateKey), publicKey = issuerKp.publicKey.toJavaPublicKey ) diff --git a/pollux/sql-doobie/src/main/scala/org/hyperledger/identus/pollux/sql/repository/JdbcCredentialStatusListRepository.scala b/pollux/sql-doobie/src/main/scala/org/hyperledger/identus/pollux/sql/repository/JdbcCredentialStatusListRepository.scala index 6102088e9e..e6508496f6 100644 --- a/pollux/sql-doobie/src/main/scala/org/hyperledger/identus/pollux/sql/repository/JdbcCredentialStatusListRepository.scala +++ b/pollux/sql-doobie/src/main/scala/org/hyperledger/identus/pollux/sql/repository/JdbcCredentialStatusListRepository.scala @@ -80,7 +80,7 @@ class JdbcCredentialStatusListRepository(xa: Transactor[ContextAwareTask], xb: T val id = UUID.randomUUID() val issued = Instant.now() - val issuerDid = jwtIssuer.did.value + val issuerDid = jwtIssuer.did.toString val credentialWithEmbeddedProof = for { bitString <- BitString.getInstance().mapError { diff --git a/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiableCredentialPayload.scala b/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiableCredentialPayload.scala index 8c42a2225c..f152211274 100644 --- a/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiableCredentialPayload.scala +++ b/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiableCredentialPayload.scala @@ -6,7 +6,7 @@ import io.circe.* import io.circe.generic.auto.* import io.circe.parser.decode import io.circe.syntax.* -import org.hyperledger.identus.castor.core.model.did.VerificationRelationship +import org.hyperledger.identus.castor.core.model.did.{DID, VerificationRelationship} import org.hyperledger.identus.pollux.vc.jwt.revocation.BitString import org.hyperledger.identus.shared.crypto.KmpSecp256k1KeyOps import org.hyperledger.identus.shared.http.UriResolver @@ -20,17 +20,6 @@ import java.time.{Clock, Instant, OffsetDateTime, ZoneId} import java.time.temporal.TemporalAmount import scala.util.{Failure, Try} -//TODO: We should remove this code and use the DID form the castor library -opaque type DID = String - -object DID { - def apply(value: String): DID = value - - extension (did: DID) { - def value: String = did - } -} - case class Issuer(did: DID, signer: Signer, publicKey: PublicKey) sealed trait VerifiableCredentialPayload @@ -207,9 +196,6 @@ object CredentialPayload { import InstantDecoderEncoder.* import JwtProof.Implicits.* - implicit val didEncoder: Encoder[DID] = - (did: DID) => did.value.asJson - implicit val refreshServiceEncoder: Encoder[RefreshService] = (refreshService: RefreshService) => Json diff --git a/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiablePresentationPayload.scala b/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiablePresentationPayload.scala index 122027cbc2..9cada23670 100644 --- a/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiablePresentationPayload.scala +++ b/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/VerifiablePresentationPayload.scala @@ -18,7 +18,7 @@ import scala.util.Try sealed trait VerifiablePresentationPayload -case class Prover(did: DID, signer: Signer, publicKey: PublicKey) +case class Prover(did: String, signer: Signer, publicKey: PublicKey) case class W3cVerifiablePresentationPayload(payload: W3cPresentationPayload, proof: JwtProof) extends Verifiable(proof), diff --git a/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021.scala b/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021.scala index 4e580e2fbd..8629b9cc1d 100644 --- a/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021.scala +++ b/pollux/vc-jwt/src/main/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021.scala @@ -4,7 +4,6 @@ import io.circe.{Json, JsonObject} import io.circe.syntax.* import org.hyperledger.identus.pollux.vc.jwt.* import org.hyperledger.identus.pollux.vc.jwt.revocation.VCStatusList2021Error.{DecodingError, EncodingError} -import org.hyperledger.identus.pollux.vc.jwt.DID.* import zio.* import java.time.Instant @@ -62,7 +61,7 @@ object VCStatusList2021 { ), maybeId = Some(vcId), `type` = Set("VerifiableCredential", "StatusList2021Credential"), - issuer = Left(jwtIssuer.did.value), + issuer = Left(jwtIssuer.did.toString), issuanceDate = Instant.now, maybeExpirationDate = None, maybeCredentialSchema = None, diff --git a/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/JWTVerificationTest.scala b/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/JWTVerificationTest.scala index eae806f15b..6bac6f5675 100644 --- a/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/JWTVerificationTest.scala +++ b/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/JWTVerificationTest.scala @@ -5,7 +5,7 @@ import com.nimbusds.jose.jwk.{Curve, ECKey} import com.nimbusds.jose.jwk.gen.ECKeyGenerator import io.circe.* import io.circe.syntax.* -import org.hyperledger.identus.castor.core.model.did.VerificationRelationship +import org.hyperledger.identus.castor.core.model.did.{DID, VerificationRelationship} import org.hyperledger.identus.pollux.vc.jwt.CredentialPayload.Implicits.* import org.hyperledger.identus.shared.http.* import zio.* @@ -22,11 +22,11 @@ object JWTVerificationTest extends ZIOSpecDefault { case class IssuerWithKey(issuer: Issuer, key: ECKey) - private def createUser(did: DID): IssuerWithKey = { + private def createUser(did: String): IssuerWithKey = { val ecKey = ECKeyGenerator(Curve.SECP256K1).generate() IssuerWithKey( Issuer( - did = did, + did = DID.fromString(did).toOption.get, signer = ES256KSigner(ecKey.toPrivateKey), publicKey = ecKey.toPublicKey ), @@ -68,7 +68,7 @@ object JWTVerificationTest extends ZIOSpecDefault { val validUntil = Instant.parse("2010-01-09T00:00:00Z") // EXPIRATION DATE val jwtCredentialExp = Instant.parse("2010-01-12T00:00:00Z") // EXPIRATION DATE val jwtCredentialPayload = JwtCredentialPayload( - iss = issuer.issuer.did.value, + iss = issuer.issuer.did.toString, maybeSub = Some("1"), vc = JwtVc( `@context` = Set("https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1"), @@ -81,7 +81,7 @@ object JWTVerificationTest extends ZIOSpecDefault { maybeTermsOfUse = None, maybeValidFrom = Some(validFrom), maybeValidUntil = Some(validUntil), - maybeIssuer = Some(Left(issuer.issuer.did.value)) + maybeIssuer = Some(Left(issuer.issuer.did.toString)) ), nbf = jwtCredentialNbf, // ISSUANCE DATE aud = Set.empty, @@ -188,7 +188,7 @@ object JWTVerificationTest extends ZIOSpecDefault { ) }, test("validate dates happy path") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) for { validation <- ZIO.succeed( @@ -200,7 +200,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assertTrue(validation.fold(_ => false, _ => true)) }, test("validate dates should fail given after valid until") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) for { validation <- ZIO.succeed( @@ -212,7 +212,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assertTrue(validation.fold(_ => true, _ => false)) }, test("validate dates should fail given before valid from") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) for { validation <- ZIO.succeed( @@ -224,7 +224,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assertTrue(validation.fold(_ => true, _ => false)) }, test("validate PrismDID issued JWT VC using verification publicKeys") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver( Map( @@ -247,7 +247,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assertTrue(validation.fold(_ => false, _ => true)) }, test("validate PrismDID issued JWT VC using specified proofPurpose resolved as embedded key") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver( Map( @@ -272,7 +272,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assertTrue(validation.fold(_ => false, _ => true)) }, test("validate PrismDID issued JWT VC using specified proofPurpose resolved as referenced key") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver( Map( @@ -298,7 +298,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assertTrue(validation.fold(_ => false, _ => true)) }, test("validate PrismDID issued JWT VC using incorrect proofPurpose should fail") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver( Map( @@ -323,7 +323,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assert(validation.fold(_ => false, _ => true))(equalTo(false)) }, test("validate PrismDID issued JWT VC using non-resolvable DID should fail") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver(Map.empty) for { @@ -331,7 +331,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assert(validation.fold(_ => false, _ => true))(equalTo(false)) }, test("validate PrismDID issued JWT VC using non-existing public-key should fail") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver(Map("did:prism:issuer" -> generateDidDocument(did = "did:prism:issuer"))) for { @@ -339,7 +339,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assert(validation.fold(_ => false, _ => true))(equalTo(false)) }, test("validate PrismDID issued JWT VC using incompatible public-key type should fail") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver( Map( @@ -362,7 +362,7 @@ object JWTVerificationTest extends ZIOSpecDefault { } yield assert(validation.fold(_ => false, _ => true))(equalTo(false)) }, test("validate PrismDID issued JWT VC using different ECKey should fail") { - val issuer = createUser(DID("did:prism:issuer")) + val issuer = createUser("did:prism:issuer") val jwtCredential = createJwtCredential(issuer) val resolver = makeResolver( Map( diff --git a/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021Spec.scala b/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021Spec.scala index 9011b923e8..218184f64a 100644 --- a/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021Spec.scala +++ b/pollux/vc-jwt/src/test/scala/org/hyperledger/identus/pollux/vc/jwt/revocation/VCStatusList2021Spec.scala @@ -1,6 +1,7 @@ package org.hyperledger.identus.pollux.vc.jwt.revocation -import org.hyperledger.identus.pollux.vc.jwt.{DID, ES256KSigner, Issuer, JwtCredential} +import org.hyperledger.identus.castor.core.model.did.DID +import org.hyperledger.identus.pollux.vc.jwt.{ES256KSigner, Issuer, JwtCredential} import org.hyperledger.identus.shared.crypto.KmpSecp256k1KeyOps import zio.{UIO, ZIO} import zio.test.{assertTrue, Spec, ZIOSpecDefault} @@ -17,7 +18,7 @@ object VCStatusList2021Spec extends ZIOSpecDefault { ZIO.succeed( Issuer( - did = DID("did:issuer:MDP8AsFhHzhwUvGNuYkX7T"), + did = DID.fromString("did:issuer:MDP8AsFhHzhwUvGNuYkX7T").toOption.get, signer = ES256KSigner(javaSKey), publicKey = javaPKey )