Skip to content

Commit

Permalink
fix: anoncred's createPresentation
Browse files Browse the repository at this point in the history
  • Loading branch information
FabioPinheiro committed Oct 11, 2023
1 parent 17def3f commit bb9462c
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 18 deletions.
Binary file modified pollux/lib/anoncreds/anoncreds-jvm-1.0-SNAPSHOT.jar
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
28 changes: 16 additions & 12 deletions pollux/lib/anoncreds/native-lib/helper_script_to_update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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],
Expand All @@ -150,7 +154,7 @@ object AnoncredLib {
.Prover()
.createPresentation(
presentationRequest,
credentials.map(e => e: uniffi.anoncreds.Credential).asJava, // sequence<Credential> credentials,
credentialRequests.map(i => i: uniffi.anoncreds.CredentialRequests).asJava, // sequence<Credential> credentials,
selfAttested.asJava, // record<string, string>? self_attested,
linkSecret, // LinkSecret link_secret,
schemas.view.mapValues(i => i: uniffi.anoncreds.Schema).toMap.asJava, // record<SchemaId, Schema> schemas,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand All @@ -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(
Expand Down

0 comments on commit bb9462c

Please sign in to comment.