11use anoncreds:: data_types:: w3c:: VerifiableCredentialSpecVersion ;
22use anoncreds:: data_types:: w3c:: credential_attributes:: CredentialAttributeValue ;
3- use anoncreds:: verifier;
3+ use anoncreds:: { verifier, w3c } ;
44use rstest:: rstest;
55use serde_json:: json;
66use std:: collections:: { BTreeSet , HashMap } ;
@@ -728,7 +728,12 @@ fn anoncreds_demo_proof_does_not_verify_with_wrong_attr_and_predicates(
728728}
729729
730730#[ rstest]
731- fn anoncreds_demo_proof_does_not_verify_with_multiple_link_secrets ( ) {
731+ #[ case( CredentialFormat :: Legacy , PresentationFormat :: Legacy ) ]
732+ #[ case( CredentialFormat :: W3C , PresentationFormat :: W3C ) ]
733+ fn anoncreds_demo_proof_does_not_verify_with_multiple_link_secrets (
734+ #[ case] credential_format : CredentialFormat ,
735+ #[ case] presentation_format : PresentationFormat ,
736+ ) {
732737 // Create pseudo ledger and wallets
733738
734739 use anoncreds:: { prover, types:: PresentCredentials } ;
@@ -755,7 +760,7 @@ fn anoncreds_demo_proof_does_not_verify_with_multiple_link_secrets() {
755760 // Issuer creates a credential
756761 let cred_values = fixtures:: credential_values ( GVT_CRED ) ;
757762 let issue_cred = issuer_wallet. create_credential (
758- & CredentialFormat :: Legacy ,
763+ & credential_format ,
759764 & gvt_cred_def_id,
760765 & cred_offer,
761766 & cred_request,
@@ -783,7 +788,7 @@ fn anoncreds_demo_proof_does_not_verify_with_multiple_link_secrets() {
783788 // Issuer creates a credential
784789 let cred_values = fixtures:: credential_values ( GVT_CRED ) ;
785790 let issue_cred = issuer_wallet. create_credential (
786- & CredentialFormat :: Legacy ,
791+ & credential_format ,
787792 & gvt_cred_def_id,
788793 & cred_offer,
789794 & cred_request,
@@ -841,31 +846,60 @@ fn anoncreds_demo_proof_does_not_verify_with_multiple_link_secrets() {
841846 } ] ,
842847 } ] ;
843848
844- // Prover creates presentation with two different link secrets
845- let mut presented = PresentCredentials :: default ( ) ;
846- prover_wallet_1. prepare_credentials_to_present (
847- & mut presented,
848- & prover_wallet_1. credentials ,
849- & present_credentials_1,
850- ) ;
851- prover_wallet_2. prepare_credentials_to_present (
852- & mut presented,
853- & prover_wallet_2. credentials ,
854- & present_credentials_2,
855- ) ;
856-
857849 // Prover creates presentation
858- let presentation = prover:: create_presentation (
859- & pres_request,
860- presented,
861- None ,
862- // This link secret value is superseded by the ones assigned to each credential in 'presented'
863- & prover_wallet_1. link_secret ,
864- & schemas,
865- & cred_defs,
866- )
867- . expect ( "Error creating presentation" ) ;
868- let presentation = Presentations :: Legacy ( presentation) ;
850+ let presentation = match presentation_format {
851+ PresentationFormat :: Legacy => {
852+ // Prover creates presentation with two different link secrets
853+ let mut presented = PresentCredentials :: default ( ) ;
854+ prover_wallet_1. prepare_credentials_to_present (
855+ & mut presented,
856+ & prover_wallet_1. credentials ,
857+ & present_credentials_1,
858+ ) ;
859+ prover_wallet_2. prepare_credentials_to_present (
860+ & mut presented,
861+ & prover_wallet_2. credentials ,
862+ & present_credentials_2,
863+ ) ;
864+ prover:: create_presentation (
865+ & pres_request,
866+ presented,
867+ None ,
868+ // This link secret value is superseded by the ones assigned to each credential in 'presented'
869+ & prover_wallet_1. link_secret ,
870+ & schemas,
871+ & cred_defs,
872+ )
873+ . expect ( "Error creating presentation" )
874+ . into ( )
875+ }
876+ PresentationFormat :: W3C => {
877+ // Prover creates presentation with two different link secrets
878+ let mut presented = PresentCredentials :: default ( ) ;
879+ prover_wallet_1. prepare_credentials_to_present (
880+ & mut presented,
881+ & prover_wallet_1. w3c_credentials ,
882+ & present_credentials_1,
883+ ) ;
884+ prover_wallet_2. prepare_credentials_to_present (
885+ & mut presented,
886+ & prover_wallet_2. w3c_credentials ,
887+ & present_credentials_2,
888+ ) ;
889+
890+ w3c:: prover:: create_presentation (
891+ & pres_request,
892+ presented,
893+ // This link secret value is superseded by the ones assigned to each credential in 'presented'
894+ & prover_wallet_1. link_secret ,
895+ & schemas,
896+ & cred_defs,
897+ None ,
898+ )
899+ . expect ( "Error creating presentation" )
900+ . into ( )
901+ }
902+ } ;
869903
870904 let valid = verifier_wallet. verify_presentation (
871905 & presentation,
0 commit comments