diff --git a/pollux/lib/anoncreds/anoncreds-jvm-1.0-SNAPSHOT.jar b/pollux/lib/anoncreds/anoncreds-jvm-1.0-SNAPSHOT.jar index 99cde9911b..77851ec6e3 100644 Binary files a/pollux/lib/anoncreds/anoncreds-jvm-1.0-SNAPSHOT.jar and b/pollux/lib/anoncreds/anoncreds-jvm-1.0-SNAPSHOT.jar differ diff --git a/pollux/lib/anoncreds/native-lib/NATIVE/darwin-aarch64/libuniffi_anoncreds.dylib b/pollux/lib/anoncreds/native-lib/NATIVE/darwin-aarch64/libuniffi_anoncreds.dylib index 5c2899c872..bc94bcf375 100755 Binary files a/pollux/lib/anoncreds/native-lib/NATIVE/darwin-aarch64/libuniffi_anoncreds.dylib and b/pollux/lib/anoncreds/native-lib/NATIVE/darwin-aarch64/libuniffi_anoncreds.dylib differ diff --git a/pollux/lib/anoncreds/native-lib/NATIVE/darwin-x86-64/libuniffi_anoncreds.dylib b/pollux/lib/anoncreds/native-lib/NATIVE/darwin-x86-64/libuniffi_anoncreds.dylib index b5efdd6895..08206a099e 100755 Binary files a/pollux/lib/anoncreds/native-lib/NATIVE/darwin-x86-64/libuniffi_anoncreds.dylib and b/pollux/lib/anoncreds/native-lib/NATIVE/darwin-x86-64/libuniffi_anoncreds.dylib differ diff --git a/pollux/lib/anoncreds/native-lib/NATIVE/linux-aarch64/libuniffi_anoncreds.so b/pollux/lib/anoncreds/native-lib/NATIVE/linux-aarch64/libuniffi_anoncreds.so index 51495c275f..5ccdac39dd 100755 Binary files a/pollux/lib/anoncreds/native-lib/NATIVE/linux-aarch64/libuniffi_anoncreds.so and b/pollux/lib/anoncreds/native-lib/NATIVE/linux-aarch64/libuniffi_anoncreds.so differ diff --git a/pollux/lib/anoncreds/native-lib/NATIVE/linux-x86-64/libuniffi_anoncreds.so b/pollux/lib/anoncreds/native-lib/NATIVE/linux-x86-64/libuniffi_anoncreds.so index aea4d32d5e..5431d6e903 100755 Binary files a/pollux/lib/anoncreds/native-lib/NATIVE/linux-x86-64/libuniffi_anoncreds.so and b/pollux/lib/anoncreds/native-lib/NATIVE/linux-x86-64/libuniffi_anoncreds.so differ diff --git a/pollux/lib/anoncreds/native-lib/helper_script_to_update.sh b/pollux/lib/anoncreds/native-lib/helper_script_to_update.sh index 7f8f235dca..2242db0f53 100644 --- a/pollux/lib/anoncreds/native-lib/helper_script_to_update.sh +++ b/pollux/lib/anoncreds/native-lib/helper_script_to_update.sh @@ -2,21 +2,25 @@ RELEASES=https://github.com/input-output-hk/anoncreds-rs/releases/download/ VERSION=expose_presentation_methods_in_uniffi -SHA="16a7178ca979f7643788f6ebf8189131ab922a53" +SHA="ea59e64c4e6be3885c3c4907d02d63254e2025c4" -mkdir NATIVE_new -mkdir NATIVE_new/darwin-aarch64 -mkdir NATIVE_new/darwin-x86-64 -mkdir NATIVE_new/linux-aarch64 -mkdir NATIVE_new/linux-x86-64 +rm -rf NATIVE/darwin-aarch64 +rm -rf NATIVE/darwin-x86-64 +rm -rf NATIVE/linux-aarch64 +rm -rf NATIVE/linux-x86-64 -wget -c $RELEASES/$VERSION/library-darwin-aarch64-$SHA.tar.gz -O - | tar -xz -C NATIVE_new/darwin-aarch64 -wget -c $RELEASES/$VERSION/library-darwin-x86_64-$SHA.tar.gz -O - | tar -xz -C NATIVE_new/darwin-x86-64 -wget -c $RELEASES/$VERSION/library-linux-aarch64-$SHA.tar.gz -O - | tar -xz -C NATIVE_new/linux-aarch64 -wget -c $RELEASES/$VERSION/library-linux-x86_64-$SHA.tar.gz -O - | tar -xz -C NATIVE_new/linux-x86-64 +mkdir NATIVE/darwin-aarch64 +mkdir NATIVE/darwin-x86-64 +mkdir NATIVE/linux-aarch64 +mkdir NATIVE/linux-x86-64 -rename 'libanoncreds_uniffi.so' 'libuniffi_anoncreds.so' NATIVE_new/**/*.so -rename 'libanoncreds_uniffi.dylib' 'libuniffi_anoncreds.dylib' NATIVE_new/**/*.dylib +wget -c $RELEASES/$VERSION/library-darwin-aarch64-$SHA.tar.gz -O - | tar -xz -C NATIVE/darwin-aarch64 +wget -c $RELEASES/$VERSION/library-darwin-x86_64-$SHA.tar.gz -O - | tar -xz -C NATIVE/darwin-x86-64 +wget -c $RELEASES/$VERSION/library-linux-aarch64-$SHA.tar.gz -O - | tar -xz -C NATIVE/linux-aarch64 +wget -c $RELEASES/$VERSION/library-linux-x86_64-$SHA.tar.gz -O - | tar -xz -C NATIVE/linux-x86-64 + +rename 'libanoncreds_uniffi.so' 'libuniffi_anoncreds.so' NATIVE/**/*.so +rename 'libanoncreds_uniffi.dylib' 'libuniffi_anoncreds.dylib' NATIVE/**/*.dylib ## TODO missing anoncreds-jvm-1.0-SNAPSHOT.jar diff --git a/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/AnoncredLib.scala b/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/AnoncredLib.scala index d4987bd8de..8a96766d61 100644 --- a/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/AnoncredLib.scala +++ b/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/AnoncredLib.scala @@ -138,9 +138,13 @@ object AnoncredLib { type SchemaId = String type CredentialDefinitionId = String + // TODO FIX + // [info] uniffi.anoncreds.AnoncredsException$CreatePresentationException: Create Presentation: Error: Error: Invalid structure + // [info] Caused by: Predicate is not satisfied + def createPresentation( presentationRequest: PresentationRequest, - credentials: Seq[Credential], + credentialRequests: Seq[CredentialAndRequestedAttributesPredicates], selfAttested: Map[String, String], linkSecret: LinkSecret, schemas: Map[SchemaId, SchemaDef], @@ -150,7 +154,7 @@ object AnoncredLib { .Prover() .createPresentation( presentationRequest, - credentials.map(e => e: uniffi.anoncreds.Credential).asJava, // sequence credentials, + credentialRequests.map(i => i: uniffi.anoncreds.CredentialRequests).asJava, // sequence credentials, selfAttested.asJava, // record? self_attested, linkSecret, // LinkSecret link_secret, schemas.view.mapValues(i => i: uniffi.anoncreds.Schema).toMap.asJava, // record schemas, @@ -159,6 +163,15 @@ object AnoncredLib { ) } + // TODO FIX + // uniffi.anoncreds.AnoncredsException$ProcessCredentialException: Verify Presentation: Error: + // Requested restriction validation failed for "{"sex": Some("M")}" attributes [$and operator validation failed. + // [$eq operator validation failed for tag: "attr::sex::value", value: "F" [Proof rejected: "attr::sex::value" values are different: expected: "F", actual: "M"]]] + + // TODO FIX + // uniffi.anoncreds.AnoncredsException$ProcessCredentialException: Verify Presentation: Error: Requested restriction validation failed for "{"sex": Some("M")}" attributes [$and operator validation failed. [$eq operator validation failed for tag: "cred_def_id", value: "CRED_DEF_ID" [Proof rejected: "cred_def_id" values are different: expected: "CRED_DEF_ID", actual: "mock:uri3"]]] + + // FIXME its always return false .... def verifyPresentation( presentation: Presentation, presentationRequest: PresentationRequest, diff --git a/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/Models.scala b/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/Models.scala index ca8670c18d..12ec9cb392 100644 --- a/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/Models.scala +++ b/pollux/lib/anoncreds/src/main/scala/io/iohk/atala/pollux/anoncreds/Models.scala @@ -3,6 +3,7 @@ package io.iohk.atala.pollux.anoncreds import uniffi.anoncreds.{ Nonce, Credential as UniffiCredential, + CredentialRequests as UniffiCredentialRequests, CredentialDefinition as UniffiCredentialDefinition, CredentialDefinitionPrivate as UniffiCredentialDefinitionPrivate, CredentialKeyCorrectnessProof as UniffiCredentialKeyCorrectnessProof, @@ -257,6 +258,47 @@ object Credential { } } +// **************************************************************************** +case class CredentialAndRequestedAttributesPredicates( + credential: Credential, + requestedAttribute: Seq[String], + requestedPredicate: Seq[String], +) + +object CredentialAndRequestedAttributesPredicates { + given Conversion[CredentialAndRequestedAttributesPredicates, UniffiCredentialRequests] with { + import uniffi.anoncreds.RequestedAttribute + import uniffi.anoncreds.RequestedPredicate + def apply(credentialRequests: CredentialAndRequestedAttributesPredicates): UniffiCredentialRequests = { + val credential = Credential.given_Conversion_Credential_UniffiCredential(credentialRequests.credential) + val requestedAttributes = credentialRequests.requestedAttribute.map(a => RequestedAttribute(a, true)) + val requestedPredicates = credentialRequests.requestedPredicate.map(p => RequestedPredicate(p)) + UniffiCredentialRequests(credential, requestedAttributes.asJava, requestedPredicates.asJava) + } + } + + given Conversion[UniffiCredentialRequests, CredentialAndRequestedAttributesPredicates] with { + def apply(credentialRequests: UniffiCredentialRequests): CredentialAndRequestedAttributesPredicates = { + CredentialAndRequestedAttributesPredicates( + Credential.given_Conversion_UniffiCredential_Credential(credentialRequests.getCredential()), + credentialRequests + .getRequestedAttribute() + .asScala + .toSeq + .filter(e => e.getRevealed()) + .map(e => e.getReferent()), + credentialRequests + .getRequestedPredicate() + .asScala + .toSeq + .map(e => e.getReferent()) + ) + } + } +} + +//UniffiCredentialRequests + // **************************************************************************** case class PresentationRequest(data: String) diff --git a/pollux/lib/anoncredsTest/src/test/scala/io/iohk/atala/pollux/anoncreds/PoCNewLib.scala b/pollux/lib/anoncredsTest/src/test/scala/io/iohk/atala/pollux/anoncreds/PoCNewLib.scala index 405f1592c6..c400acd288 100644 --- a/pollux/lib/anoncredsTest/src/test/scala/io/iohk/atala/pollux/anoncreds/PoCNewLib.scala +++ b/pollux/lib/anoncredsTest/src/test/scala/io/iohk/atala/pollux/anoncreds/PoCNewLib.scala @@ -58,7 +58,8 @@ class PoCNewLib extends AnyFlatSpec { // ############## println("*** holder " + ("*" * 100)) - val linkSecret = LinkSecretWithId("ID_of_some_secret_1") + val ls1 = LinkSecret("65965334953670062552662719679603258895632947953618378932199361160021795698890") + val linkSecret = LinkSecretWithId("ID_of_some_secret_1", ls1) val credentialRequest = AnoncredLib.createCredentialRequest(linkSecret, credentialDefinition.cd, credentialOffer) println("*" * 100) @@ -88,7 +89,10 @@ class PoCNewLib extends AnyFlatSpec { "name":"proof_req_1", "version":"0.1", "requested_attributes": { - "sex":{"name":"sex"} + "sex":{"name":"sex", "restrictions":{"attr::sex::value":"M","cred_def_id":"$CRED_DEF_ID"}} + }, + "requested_predicates":{ + "age":{"name":"age", "p_type":">=", "p_value":18} } }""".stripMargin @@ -97,8 +101,10 @@ class PoCNewLib extends AnyFlatSpec { val presentation = AnoncredLib.createPresentation( presentationRequest, // : PresentationRequest, - Seq(credential), // credentials: Seq[Credential], - Map("sex" -> "M"), // selfAttested: Map[String, String], + Seq( + CredentialAndRequestedAttributesPredicates(credential, Seq("sex"), Seq("age")) + ), // credentials: Seq[Credential], + Map(), // selfAttested: Map[String, String], linkSecret.secret, // linkSecret: LinkSecret, Map(credentialOffer.schemaId -> schema), // schemas: Map[SchemaId, SchemaDef], Map(